You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:09:01