Как заставить спрайт двигаться один раз при нажатии клавиши со стрелкой?

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

 public class Contents extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(100, this);
private Image man;
int x=0, y=0;

public Contents() {
    super.setDoubleBuffered(true);
    t.start();
    addKeyListener(this);
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);
}

@Override
public void paintComponent (Graphics g) {
    super.paintComponent(g);
    super.setBackground(Color.white);
    ImageIcon ii = new ImageIcon("guy.png");
    man = ii.getImage();

    Graphics2D g2d = (Graphics2D)g;
    g2d.drawImage(man, x, y, this);
}

    double xv = 0;
    double yv = 0;

    public void move() {
        x += xv;
        y += yv;
    }
    public void up() {
        yv = -1;
        xv = 0;
    }
    public void down() {
        yv = 1;
        xv = 0;
    }
    public void left () {
        xv = -1;
        yv = 0;
    }
    public void right () {
    xv = 1;
    yv = 0;
    }
@Override
public void actionPerformed(ActionEvent e) {
    repaint();
    //Collision for left and right walls
    if (x==0) {
        xv = 1; 
    }
    else if (x==900-240) {
        xv = -1;
    }
    // Collision for top and bottom walls
    if (y==0) {
        yv = 1;
    }
    else if (y==600-320) {
        yv = -1;
    }
    move();
}
public void keyPressed(KeyEvent e) {
    int code = e.getKeyCode();
    if (code == KeyEvent.VK_UP) {
        up();
    }
    if (code == KeyEvent.VK_DOWN) {
        down();
    }
    if (code == KeyEvent.VK_LEFT) {
        left();
    }
    if (code == KeyEvent.VK_RIGHT) {
        right();
    }
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}

}

Это работает, когда я удаляю границы в ActionEvent. Границы предотвращают выход спрайта за пределы экрана. Но я хочу сохранить границы и контролировать спрайт.


person luckyruby1    schedule 21.01.2019    source источник


Ответы (1)


Я понял. В разделе keyReleased установите xv=0. Затем, когда вы отпустите клавишу со стрелкой, спрайт перестанет двигаться.

person luckyruby1    schedule 24.01.2019