2D-игра: пули стреляют влево и вправо

Я настроил систему стрельбы пулями в своей 2D-игре. где, когда персонаж движется влево, пуля запускается и движется влево и хорошо. это работает и для правой стороны. но вот проблема... Скажем, я стреляю влево, но прежде чем он покинет экран, персонаж движется вправо, это изменение направления также меняет направление уже движущейся пули, и она движется вправо, как персонаж. Я могу заставить пулю двигаться вперед и назад с помощью левой и правой клавиш.

Вот класс пули. метод move() перемещает пулю.

package gameLibrary;

import java.awt.*;
import java.util.ArrayList;

import javax.swing.ImageIcon;

public class Bullet {

int x,y, x2;
Image img;
boolean visible;

public Bullet(int startX, int startY) {
    x = startX;
    x2 = startX;
    y = startY;

ImageIcon newBullet = new             
ImageIcon(getClass().getResource("/resources/bullet.png"));
img = newBullet.getImage();
    visible = true;

}
public void move(){

    if(Character.left){
        x -= 4;
        if(x < 0){
            visible = false;
            Character.left = false;
        }
    }
    if(Character.right) {
        x = x + 4;
        if(x > 854){
        visible = false; 
        Character.right = false;
    }
    }



}
public int getX(){
    return x;
}
public int getY() {
    return y;
}
public boolean getVisible(){
    return visible;
}
public Image getImage(){
    return img;
}
 }

person user2853442    schedule 09.10.2013    source источник


Ответы (1)


Пуля должна знать свое начальное направление, поэтому передайте логическое значение в конструкторе и установите логическую переменную-член (возможно, назовите ее moveLeft). Затем в move проверьте логический член вместо проверки Character.left. if (Character.right) может быть просто else.

person Dave    schedule 09.10.2013
comment
хорошо спасибо! это работает. но теперь у меня проблема, когда персонаж не движется, пуля стреляет, но остается в том же месте, потому что персонаж не двигался ни влево, ни вправо. - person user2853442; 09.10.2013
comment
есть ли что-то в java, где мы могли бы проверить, какой была последняя нажатая клавиша? либо слева, либо справа? потому что тогда я мог бы просто проверить, что moveLeft && MoveRight == false, а затем использовать последнюю нажатую клавишу в качестве направления. - person user2853442; 09.10.2013
comment
Вам нужен игровой цикл, чтобы постоянно обновлять состояние объектов в игре. Вот где следует вызывать Bullet.move(). Изучите ключевые события в Java, чтобы найти подробнее об обработке ввода. - person Dave; 09.10.2013