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

如何移除重复执行代码中旧图片实例 仅保留新生成的图片版本

解决方案

核心思路是存储上一次生成的敌方单位实例,每次生成新单位前先删除旧实例:

  • 在enemies函数外部声明一个变量,用来存储当前显示的敌方单位实例,默认设为null
  • 每次触发enemies函数时,先判断存储的实例是否存在,存在就调用remove方法删除
  • 新单位生成并添加到画布后,将新实例赋值给预先声明的变量

修改后的完整代码如下:

// 函数外部声明变量存储当前敌方实例
var currentEnemy = null;

function enemies(){
   // 先移除旧的敌方单位
   if(currentEnemy !== null) {
       remove(currentEnemy);
   }
   var movementX= Randomizer.nextInt(midW,width-50);
   var movementY= Randomizer.nextInt(midH,0);
   var enemyMove= new WebImage("https://codehs.com/uploads/2d57d03e4ed3a0aaa0bc43f4cb37509b");
   enemyMove.setSize(50,50);
   enemyMove.setPosition(movementX,movementY);
   add(enemyMove);
   // 把新生成的实例赋值给存储变量
   currentEnemy = enemyMove;
}

可选优化(避免全局变量污染)

如果不想引入全局变量,也可以把实例挂载到函数本身的属性上,效果完全一致:

function enemies(){
   if(enemies.currentEnemy) {
       remove(enemies.currentEnemy);
   }
   var movementX= Randomizer.nextInt(midW,width-50);
   var movementY= Randomizer.nextInt(midH,0);
   var enemyMove= new WebImage("https://codehs.com/uploads/2d57d03e4ed3a0aaa0bc43f4cb37509b");
   enemyMove.setSize(50,50);
   enemyMove.setPosition(movementX,movementY);
   add(enemyMove);
   enemies.currentEnemy = enemyMove;
}

你之前尝试的if(enemyMove == 2)逻辑不成立,enemyMove是WebImage实例对象,永远不可能等于数字2,且每次函数内部定义的enemyMove都是局部变量,函数执行完就无法访问上一次的实例,自然无法删除旧单位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 08:45:04