我的KeyPressed正在运行,但我的moveLeft方法中的avatarDX没有变化。我是否对moveLeft做错了什么?看起来它应该很简单,但我不确定我做错了什么。我没有任何错误消息。
我正在使用
在画布上绘制图像gc.drawImage(avatar, avatarSX, avatarSY, avatarSW, avatarSH, avatarDX, avatarDY, avatarDW, avatarDH);
对于KeyPressed我有
canvas.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
double speed = 2;
switch(ke.getCode()) {
case A:
System.out.println("pressed a");
moveLeft(avatarDX, speed);
System.out.println(avatarDX);
break;
}
}
});
moveLeft是
private void moveLeft(double avatarDX, double speed) {
while (avatarDX > 0) {
avatarDX -= speed;
}
}
我很感激我在这方面的任何帮助。
答案 0 :(得分:1)
该程序没有按预期行事的原因(可能有其他原因)是您尝试通过while循环处理以控制您的头像。
这将暂停JavaFX应用程序,直到循环完成,然后在循环结束时将屏幕更新为最终状态。 JavaFX不是一个即时绘图系统,它是一个保留的绘图系统,只有在您将JavaFX应用程序线程的控制权交还给JavaFX系统时才会呈现场景。
相反,您需要使用callback更新每个pulse上的场景。
我建议你使用以下方法: