Предотвращение нажатия клавиши пробела от остановки движения спрайта, управляемого с клавиатуры - PullRequest
0 голосов
/ 21 марта 2019

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

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

public void actionPerformed(ActionEvent e){ // image and graphics stuff is elsewhere in the code
    x += velx; // x and y are declared above
    y += vely;
    repaint();
}
public void up()
{
    vely = -1;
    velx = 0;
}
public void down()
{
    vely = 1;
    velx = 0;
}
public void left()
{
    vely = 0;
    velx = -1;
}
public void right()
{
    vely = 0;
    velx = 1;
}

public void keyPressed(KeyEvent e)
{
    int key = e.getKeyCode();
    if(key==KeyEvent.VK_UP)
    {
        up();
        i = 0;
    }
    if(key==KeyEvent.VK_DOWN)
    {
        down();
        i = 1;
    }
    if(key==KeyEvent.VK_LEFT)
    {
        left();
        i = 2;
    }
    if(key==KeyEvent.VK_RIGHT)
    {
        right();
        i = 3;
    }
    if(key == KeyEvent.VK_SPACE)
    {
        j = 0;
        spaceClicked = true; 
    }
 }

 public void keyReleased(KeyEvent e)
 {
    int key = e.getKeyCode();
    if(key == KeyEvent.VK_UP || key == KeyEvent.VK_DOWN)
        vely = 0;
    else
        velx = 0;
 }
 public void keyTyped(KeyEvent e)
 {
 }

Любая помощь будет оценена, спасибо.

...