Java游戏开发问题:跨类更新布尔值失败致角色无法移动
问题修复方案
1. 修正按键按下状态的错误赋值
在KeyHandler的keyPressed方法中,按下S键时错误地将downPressed设为false,这会导致按下S键时无法触发向下移动逻辑,需改为true:
@Override public void keyPressed(KeyEvent e) { int code = e.getKeyCode(); if(code == KeyEvent.VK_W){ upPressed = true; System.out.println(upPressed); } // 修正此处的赋值逻辑 if(code == KeyEvent.VK_S){ downPressed = true; } if(code == KeyEvent.VK_A){ leftPressed = true; } if(code == KeyEvent.VK_D){ rightPressed = true; } }
2. 修改update方法的条件判断逻辑
原update方法使用else if,同一时间只能响应一个按键(比如同时按W和A时,仅W的逻辑会执行)。改为独立的if判断,即可支持多按键同时输入:
public void update(){ if(KH.upPressed){ System.out.println("Updating"); playerY -= playerSpeed; } // 替换else if为独立if,支持多方向同时移动 if(KH.downPressed){ playerY += playerSpeed; } if(KH.leftPressed){ playerX -= playerSpeed; } if(KH.rightPressed){ playerX += playerSpeed; } }
3. 优化游戏线程帧率(可选)
原线程循环无帧率控制,会导致CPU占用过高。可添加简单逻辑锁定60FPS:
public void run(){ long drawInterval = 1000000000 / 60; long nextDrawTime = System.nanoTime() + drawInterval; while(gameThread != null){ update(); repaint(); try { long remainingTime = nextDrawTime - System.nanoTime(); remainingTime = remainingTime < 0 ? 0 : remainingTime; Thread.sleep(remainingTime / 1000000); nextDrawTime += drawInterval; } catch (InterruptedException e) { e.printStackTrace(); } } }
完成以上修改后,update方法即可正确获取更新后的布尔变量,实现角色移动,同时支持多方向按键输入。
内容的提问来源于stack exchange,提问作者Paula Rodríguez
相关产品推荐
相关产品推荐

