Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按下多个键_Java_Awt_Keylistener - Fatal编程技术网

Java 按下多个键

Java 按下多个键,java,awt,keylistener,Java,Awt,Keylistener,所以我想弄清楚如何使我的飞船对象同时旋转和前后移动。我做了一些研究,它说我应该使用布尔来让KeyListener同时接受多个按键。但当我尝试它时,它不允许我同时做两件事。它用一把新钥匙代替了我手中的旧钥匙。这是我的密码 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class ControlledObject extends SimpleSpaceObject implements KeyLi

所以我想弄清楚如何使我的飞船对象同时旋转和前后移动。我做了一些研究,它说我应该使用布尔来让KeyListener同时接受多个按键。但当我尝试它时,它不允许我同时做两件事。它用一把新钥匙代替了我手中的旧钥匙。这是我的密码

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class ControlledObject extends SimpleSpaceObject implements KeyListener{

public ControlledObject(Point[] inShape, Point inOffset, double inRotation) {
    super(inShape, inOffset, inRotation);
}


boolean KeyHeld = false;

public void PressedW(boolean keyW)
{
    double RotateX = Math.cos(Math.toRadians(super.shape.getRotation()));
    double RotateY = Math.sin(Math.toRadians(super.shape.getRotation()));

    if(keyW)
        super.shape.move(2*RotateX,2*RotateY);
    else
        super.shape.move(0,0);
}

public void PressedD(boolean keyD)
{
    if(keyD)
        super.shape.rotate(5);
    else
        super.shape.rotate(0);
}

public void PressedA(boolean keyA)
{
    if(keyA)
        super.shape.rotate(-5);
    else
        super.shape.rotate(0);
}

public void PressedS(boolean keyS)
{
    double RotateX = Math.cos(Math.toRadians(super.shape.getRotation()));
    double RotateY = Math.sin(Math.toRadians(super.shape.getRotation()));

    if(keyS)
        super.shape.move(-2*RotateX,-2*RotateY);
    else
        super.shape.move(0, 0);
}

@Override
public void keyPressed(KeyEvent e) {
    KeyHeld = true;
    if(e.getKeyChar() == 'w')
        PressedW(KeyHeld);
    if(e.getKeyChar() == 'd')
        PressedD(KeyHeld);
    if(e.getKeyChar() == 'a')
        PressedA(KeyHeld);
    if(e.getKeyChar() == 's')
        PressedS(KeyHeld);
}

@Override
public void keyReleased(KeyEvent e) {
    KeyHeld = false;
    PressedW(KeyHeld);
    PressedD(KeyHeld);
    PressedA(KeyHeld);
    PressedS(KeyHeld);
}

@Override
public void keyTyped(KeyEvent e) {
}
}

我知道代码并不完美,但我正在尝试一次解决一件事。

keyreased
中,您没有测试哪个键被释放,而是正在重置所有键。相反,当按键时,将其标志设置为
true
,释放时,将其标志设置为
false
。然后使用一个最新的循环来决定这些标志的实际含义…方法名不应该以大写字符开头。告诉我一个方法名是以大写字符开头的JavaAPI。不要制定自己的惯例!