gpt4 book ai didi

java - 使用 KeyPressed 在 Canvas 上移动图像

转载 作者:行者123 更新时间:2023-12-01 09:53:09 25 4
gpt4 key购买 nike

我的 KeyPressed 正在工作,但我的 moveLeft 方法中的 avatarDX 没有变化。我在 moveLeft 上做错了什么吗?看起来应该很简单,但我不确定我做错了什么。我没有任何错误消息。

我正在 Canvas 上绘制图像

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;
}
}

如果我对此非常陌生,我将不胜感激任何帮助。

最佳答案

程序未按您预期运行的一个原因(可能还有其他原因)是您尝试通过 while 循环进行处理来控制您的头像。

这只会暂停 JavaFX 应用程序,直到循环完成,然后将屏幕更新到循环结束时的最终状态。 JavaFX 不是一个即时绘图系统,它是一个保留的绘图系统,仅当您将 JavaFX 应用程序线程的控制权交还给 JavaFX 系统时才渲染场景。

相反,您需要使用 callback更新每个 pulse 上的场景。

我建议您使用以下方法:

  1. 由于您是新手,请尝试使用 JavaFX 场景图而不是 Canvas 编写应用程序。对许多事情来说,对场景图进行编程变得更加容易。如果在稍后阶段,您发现 Canvas 更适合,那么当您更好地了解 JavaFX 编程模型时,您随时可以转换为 Canvas。
  2. Review this sample使用按键在场景图周围移动角色。
  3. 不要尝试循环移动你的角色。相反,可以使用内置的 high level JavaFX animation facilities例如过渡,或者(当这些不太适合时,就像这里可能的情况一样),使用低级别 AnimationTimer接口(interface)。
  4. 阅读 game loops and JavaFX并将您在那里学到的知识应用到您的程序中。

关于java - 使用 KeyPressed 在 Canvas 上移动图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37468317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com