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

如何修复游戏关卡跳转故障,实现通关后自动进入下一级?

问题原因

  • currentLevel定义在levelComplete()方法内部,属于局部变量,每次调用该方法都会被重新初始化为0,自增后值永远为1,方法执行结束后变量就会被销毁,值完全无法留存,这是关卡无法正常递进的核心原因。
  • 现有判断逻辑也存在对应偏差:初始首次进入游戏默认加载level1,通关后自增应该加载level2,你当前的分支逻辑和关卡递进顺序并不匹配。

局部变量和static静态变量的差异

  • 局部变量:定义在方法内部,存储在栈内存中,每次方法调用时创建,方法执行结束立即销毁,每次调用都是全新的变量,之前的值完全不会保留。
  • 普通成员变量:定义在类内部、方法外部,每个类实例持有一份,生命周期和类实例一致,只要实例不销毁,变量值会一直留存,单游戏进程场景用这类变量就可以满足需求。
  • static静态变量:属于类本身而非类实例,全类共享唯一一份,整个程序运行期间只会初始化一次,值会全局留存,适合需要多实例共享进度的场景。

修正代码

把currentLevel移到类成员位置,不要在方法内重复定义即可:

// 定义为类成员变量,初始值对应你默认加载的第一关
private int currentLevel = 1;

private char[][] level1 = {
    {'#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' '},
    {'#', ' ', '|', '#', ' ', ' ', ' ', ' ', ' ', ' '},
    {'#', ' ', ' ', '#', '#', '#', ' ', ' ', ' ', ' '},
    {'#', ' ', '@', ' ', ' ', '#', ' ', ' ', ' ', ' '},
    {'#', ' ', ' ', '$', ' ', '#', ' ', ' ', ' ', ' '},
    {'#', ' ', ' ', '#', '#', '#', ' ', ' ', ' ', ' '},
    {'#', '#', '#', '#', ' ', ' ', ' ', ' ', ' ', ' '}
};

private char[][] level2 = {
    {'#', '#', '#', '#', '#', ' ', ' ', ' ', ' '},
    {'#', '@', ' ', ' ', '#', ' ', ' ', ' ', ' '},
    {'#', ' ', '$', '$', '#', ' ', '#', '#', '#'},
    {'#', ' ', '$', ' ', '#', ' ', '#', '|', '#'},
    {'#', '#', '#', ' ', '#', '#', '#', '|', '#'},
    {' ', '#', '#', ' ', ' ', ' ', ' ', '|', '#'},
    {' ', '#', ' ', ' ', ' ', '#', ' ', ' ', '#'},
    {' ', '#', ' ', ' ', ' ', '#', '#', '#', '#'},
    {' ', '#', '#', '#', '#', '#', ' ', ' ', ' '},
};

private char[][] level3 = {
    {'#', '#', '#', '#', '#', '#', ' '},
    {'#', ' ', ' ', ' ', ' ', '#', ' '},
    {'#', ' ', '#', '@', ' ', '#', ' '},
    {'#', ' ', '$', '*', ' ', '#', ' '},
    {'#', ' ', '|', '*', ' ', '#', ' '},
    {'#', ' ', ' ', ' ', ' ', '#', ' '},
    {'#', '#', '#', '#', '#', '#', ' '},
};

public void act() {
    // game code here
    if (testLevelComplete() == true) {
        levelComplete();   
    }
}

public void levelComplete()
{
    // 不要在方法内重新定义currentLevel,直接操作类成员变量
    currentLevel = currentLevel + 1;
    showWarning("Level Complete! Current level is " + currentLevel);
    if (currentLevel == 1) {
        loadLevel(level1);
    } else if (currentLevel == 2) {
        loadLevel(level2);
    } else if (currentLevel == 3) {
        loadLevel(level3);
    } else if (currentLevel > 3) {
        showWarning("Level Complete! No more levels.");
    }
}

如果需要全局共享关卡进度,把成员变量改成static修饰即可:

private static int currentLevel = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:15:04