如何移除重复执行代码中旧图片实例 仅保留新生成的图片版本
解决方案
核心思路是存储上一次生成的敌方单位实例,每次生成新单位前先删除旧实例:
- 在
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
相关产品推荐
相关产品推荐

