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

如何在条件满足后终止指定代码块运行?工程项目技术求助

问题解决与代码优化

一、修复背景自动切回的问题

你的代码里draw()函数每帧都会执行mars.setAnimation("mars");,这就导致哪怕之前把背景改成了space,下一次刷新又会被强制改回mars。解决办法是加一个状态变量,标记是否已经完成宇航员触发的背景切换,只有在未切换时才保留mars的初始动画。

二、条件满足后停止指定代码运行

可以通过状态变量划分游戏阶段,比如用gameStage变量区分"宇航员操作阶段"和"火箭操作阶段",当宇航员触发条件后切换状态,之后只执行火箭相关代码,不再处理宇航员的移动逻辑。

修改后的完整代码

var land = createSprite(200, 200);
land.setAnimation("land");
var space = createSprite(200, 200);
space.setAnimation("space");
var mars = createSprite(200, 200);
mars.setAnimation("mars");
var rocket = createSprite(350, 285);
rocket.setAnimation("up");
var astronaut = createSprite(25, 325);
astronaut.setAnimation("astronaut");
astronaut.width = 75;
astronaut.height = 75;
astronaut.visible = 1;

// 新增状态变量,标记当前游戏阶段
var gameStage = "astronautPhase";

function draw() {
    // 只有在宇航员阶段才显示mars背景
    if (gameStage === "astronautPhase") {
        mars.setAnimation("mars");
    }

    // 宇航员阶段:处理宇航员移动和触发条件
    if (gameStage === "astronautPhase") {
        if (keyDown("d")) {
            astronaut.x = astronaut.x + 3;
        }
        if (keyDown("a")) {
            astronaut.x = astronaut.x - 3;
        }
        if (astronaut.x > 330) {
            mars.setAnimation("space");
            astronaut.visible = 0;
            // 切换到火箭阶段
            gameStage = "rocketPhase";
            astronaut.destroy();
        }
    }

    // 火箭阶段:只处理火箭操作,不再执行宇航员相关代码
    if (gameStage === "rocketPhase") {
        if (keyDown("a")) {
            rocket.setAnimation("left");
            rocket.x = rocket.x - 3;
        }
        if (keyDown("d")) {
            rocket.setAnimation("right");
            rocket.x = rocket.x + 3;
        }
        if (keyDown("w")) {
            rocket.setAnimation("up");
            rocket.y = rocket.y - 3;
        }
        if (keyDown("s")) {
            rocket.setAnimation("down");
            rocket.y = rocket.y + 3;
        }
    }

    drawSprites();
}

关键修改点说明

  • 新增gameStage状态变量,明确区分两个操作阶段,避免代码交叉执行
  • 把宇航员的移动逻辑、背景初始设置都限定在astronautPhase阶段内,切换阶段后不再触发
  • 触发条件时直接切换阶段,彻底终止宇航员相关代码的运行,同时固定背景状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:38