JavaFX按键事件仅触发一次:按上键移动物件仅首次生效
解决JavaFX按键仅首次生效的问题
嘿,我来帮你排查这个问题!你的代码里有两个关键问题导致了按键仅首次生效:
1. 偏移轴的错误引用
你的begin()方法里,设置TranslateY的时候误用了getTranslateX()(X轴偏移)来计算Y轴的位置。这样第一次按下后,后续如果X轴没有变化,Y轴的位置就不会再更新了。你需要改成基于当前Y轴的偏移量来计算:
public void begin() { // 用getTranslateY()替代getTranslateX(),每次向上移动10像素(数值可按需调整) birdView.setTranslateY(birdView.getTranslateY() - 10); }
2. 节点焦点问题
JavaFX的按键事件需要目标节点(这里是game)获得焦点才能持续响应。如果game没有焦点,可能只会触发一次事件,后续就没反应了。你需要做两件事:
- 让
game节点可以获取焦点:设置setFocusTraversable(true) - 在初始化完成后,主动请求焦点:调用
game.requestFocus()
另外,建议你在按键事件里判断具体的按键(比如仅响应上方向键),避免所有按键都触发移动逻辑,让代码更精准:
// 初始化时的设置 game.setFocusTraversable(true); game.requestFocus(); // 修改按键事件监听,仅响应上方向键 game.setOnKeyPressed(e -> { if (e.getCode() == KeyCode.UP) { begin(); } });
把这些修改整合后,你的上方向键应该就能每次按下都让图片向上移动了。
内容的提问来源于stack exchange,提问作者Lee Mung
相关产品推荐
相关产品推荐

