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

Android Studio开发打砖块游戏碰撞检测时程序崩溃求助

解决打砖块游戏碰撞检测时的空指针崩溃问题

问题根源

从LogCat错误日志可以明确,崩溃原因是**NullPointerException: Attempt to read from null array**,发生在Game.java第124行的循环中——此时你尝试访问的bricks数组为null。

排查与修复步骤

1. 确认Level类中砖块数组的初始化

检查你的Level类代码,确保在填充砖块前已经完成数组的内存分配:

// 在Level类中,先初始化数组再填充元素
public static final int NumOfBricks = 5 * 14; // 70块砖
public Brick[] bricks;

// 初始化方法中先分配数组空间
public Level(...) {
    bricks = new Brick[NumOfBricks]; // 这一步不能少
    // 然后再执行你的砖块循环填充逻辑
    int id = 0;
    for (int y = 0; y < 5; y++){
        for (int x = 0; x < 14; x++){
            int addX = (brickWidth + 10) * x;
            int addY = (brickHeight + 10) * y;
            bricks[id] = new Brick(sprite, canvas, (int) positionX + addX, (int) positionY + addY);
            id++;
        }
    }
}

如果只声明了Brick[] bricks;但未执行new Brick[NumOfBricks];,数组会保持null状态,后续赋值和访问都会引发错误。

2. 确保Game类中Level实例已完成初始化

检查Game类中level对象的初始化时机:

  • 若level是在UI线程中初始化(比如onCreate方法),而GameLoop是独立线程,可能出现Game.update被调用时level还未初始化完成的情况。
  • 可以在Game的构造方法或初始化阶段提前完成level的实例化,确保调用update时level和level.bricks都不为null。

3. 添加空安全判断(防御性编程)

在Game.update方法中增加空判断,避免因对象未初始化导致的崩溃:

public void update() {
    // 先判断level和bricks数组是否有效
    if (level == null || level.bricks == null) {
        return;
    }
    bricks = level.bricks;
    for (int i = 0; i < level.NumOfBricks; i++){
        Brick brick = bricks[i];
        // 额外判断brick对象是否为null
        if (brick != null && !brick.isDestroyed && ball.collides(brick)){
            brick.isDestroyed = true;
        }
    }
}

4. 验证碰撞检测方法的参数安全性

检查Ball.collides方法,确保传入的target参数不为null时再访问其属性:

public boolean collides(Brick target) {
    if (target == null) {
        return false;
    }
    if (ballX > target.x + target.width || target.x > ballX + radius / 2){
        return false;
    }
    if (ballY > target.y + target.height || target.y > ballY + radius / 2){
        return false;
    }
    return true;
}

内容的提问来源于stack exchange,提问作者zygisk123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:01:07