Java Swing开发的下落岩石游戏横向碰撞检测失效如何修复
Java下落岩石游戏碰撞检测异常修复方案
问题根因
你当前的碰撞检测逻辑存在两处核心错误,直接导致侧面碰撞无法触发:
- 坐标偏移计算错误:游戏中所有物体坐标都是
UNIT_SIZE=25的整数倍,你原代码中的y+1、y+2是像素级偏移,和实际物体的坐标步长完全不匹配 - 碰撞判定逻辑不全:仅覆盖了岩石从正上方下落时的有限坐标匹配场景,没有覆盖玩家横向移动撞击岩石的场景,本质是逐点匹配的逻辑本身存在覆盖盲区
修复方案
直接替换checkRock()方法为以下使用标准轴对齐矩形碰撞(AABB)的代码即可,全场景覆盖碰撞判定:
public void checkRock() { // 计算玩家矩形边界:玩家宽2个UNIT_SIZE,高3个UNIT_SIZE int playerLeft = x; int playerRight = x + 2 * UNIT_SIZE; int playerTop = y; int playerBottom = y + 3 * UNIT_SIZE; // 计算岩石矩形边界:岩石宽高都是1个UNIT_SIZE int rockLeft = rockX; int rockRight = rockX + UNIT_SIZE; int rockTop = rockY; int rockBottom = rockY + UNIT_SIZE; // AABB碰撞规则:两个矩形x轴重叠且y轴重叠即判定碰撞 boolean isCollided = playerLeft < rockRight && playerRight > rockLeft && playerTop < rockBottom && playerBottom > rockTop; if (isCollided) { running = false; timer.stop(); } }
其他可选优化点
- 你代码中导入了多个未使用的包,比如
javax.swing.text.AttributeSet.ColorAttribute、java.util.random.*,可以直接删除避免编译警告 gameOver()方法中绘制文字时metrics.stringWidth("Game OVer")存在拼写错误,可修正为Game Over避免文字居中偏移
内容的提问来源于stack exchange,提问作者Eeplo
相关产品推荐
相关产品推荐

