Flash 执行循环 - 每次命中仅带走一次健康

Flash execution looping - only take health away once per hit

我是Flash新手,解决不了这个问题

如何让动作脚本每次点击只执行一次?

这是我的代码:

stage.addEventListener(Event.ENTER_FRAME,loop);
function loop (event:Event):void
    {
            for (var i:int = hBottleArray.length-1; i >= 0; i--){
        if (runner.hitTestObject(hBottleArray[i])){
            health++;
            hBottleArray.removeAt(i);
        }
            }
for (var i:int = killerarray.length-1; i >= 0; i--){
    if (runner.hitTestObject(killerarray[i])){
        health--;
        killerarray.removeAt(i);
        sign1.x-=40;
        tip1.x-=40;
        bg.x-=40;
        secretmessage.x-=40;
        healthbottle1.x-=40;
        killer.x-=40;
        killer2.x-=40;
        killer3.x-=40;
        platform.x-=40;
    }
}
    if (bg.x>327)
    {
        sign1.x-=40;
        tip1.x-=40;
        bg.x-=40;
        secretmessage.x-=40;
        healthbottle1.x-=40;
        killer.x-=40;
        killer2.x-=40;
        killer3.x-=40;
        platform.x-=40;
    }
}

结果: 它是输出面板中的警告和另一个错误.. 警告 3596:重复的变量定义。 输出 PANEL:TypeError:错误 #1006:removeAt 不是函数。 在 ObstacleCourse_fla::MainTimeline/loop()

求助如何解决

FOR NEAL DAVIS 我使用 flash player 11.2 r2o2

请注意,这不是我的整个脚本

不要使用visible 属性因为这不会移除瓶子或敌人(它仍然存在,导致脚本触发每一帧,你只是看不到它)

而是使用 healthbottle1.parent.removeChild(healthbottle1); 或类似的东西。

这样做的目的是从称为显示列表的东西中删除对象。 Google "AS3 display list" 了解更多信息。

你可以对杀手做同样的事情,但我想你不希望他们在击中玩家一次后消失。因此,您可以采用某种反冲机制,立即让玩家后退(足够的像素让敌人停止攻击他),或者让玩家在 1 秒或 2 秒内处于无敌状态。许多游戏都实现了这种类型的机制(经典的是在无敌时期使角色闪现的视觉耀斑)。如果您选择其中一种方法,请尝试一下,如果遇到困难,请告诉我们。祝你好运。

要使用我在评论中所说的方法:

假设您有 3 个名为 healthbottle1 等的健康瓶

var hBottleArray:Array = [healthbottle1,healthbottle2,healthbottle3];

然后在你的主游戏循环中:

for (var i:int = hBottleArray.length-1; i >= 0; i--){
    if (character.hitTest(hBottleArray[i])){
        health++;
        // any code you want to execute for when a health bottle is picked up
        hBottleArray.removeAt(i);//this removes the bottle from the array so it doesn't get checked again. This will stop your continued health increase. 
    }
}

带有for (var的部分是"for loop"的开始。你可以 google 那个。这里的另一个技巧是使用数组。 Google 那也是。

好的@Neal davis 我只是把瓶子放在舞台上,杀手没有阵列也很好,所以谢谢你的帮助! 我宁愿在未来学习未来的答案 (Duh xD) 并搜索它们,这样我就可以避免在 Whosebug 中被问到很多问题……但它对人们回答这个问题也很有用……XD 谢谢!