Actionscript 3 当玩家在敌人身上时,生命值每3秒下降一次

Actionscript 3 当玩家在敌人身上时,生命值每3秒下降一次,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,我在ActionScript3中制作了一个游戏,本质上我试图让它在角色Malcolm1碰到敌人Leaf1时,生命值下降1,但是我只希望在Malcolm1上次击中Leaf1已经3秒的情况下发生这种情况,这样他可以获得3秒的免疫力,所以他的生命值不会立即下降,这是我现在的代码: Malcolm1.addEventListener( Event.ENTER_FRAME, leafhitmalcolm) function leafhitmalcolm( e:Event ):void { i

我在ActionScript3中制作了一个游戏,本质上我试图让它在角色Malcolm1碰到敌人Leaf1时,生命值下降1,但是我只希望在Malcolm1上次击中Leaf1已经3秒的情况下发生这种情况,这样他可以获得3秒的免疫力,所以他的生命值不会立即下降,这是我现在的代码:

 Malcolm1.addEventListener( Event.ENTER_FRAME, leafhitmalcolm) function
 leafhitmalcolm( e:Event ):void {
     if(Malcolm1.hitTestObject(Leaf1))
     {
         Health = (Health - 1)  
     }  
 }

我怎样才能使它们至少相撞3秒钟,才能使生命值下降?

从概念上讲,你想让你的角色在命中后立即暂时无敌。为此,可以将计数器设置为每次命中角色时的3秒3*帧速率,然后每帧递减,直到达到0,并且仅在命中为0时注册命中

var hitDelay:int = 0;
function leafhitmalcom(e:Event):void {
    if(hitDelay > 0) {
        hitDelay--;
    } else if(Malcolm1.hitTestObject(Leaf1)) {
        Health--;
        hitDelay = 3 * frameRate;
    }
}
或者,您可以以类似的方式使用3000毫秒的计时器:

var recovering:Boolean = false;
function leafhitmalcom(e:Event):void {
    // Only check for a hit if not currently recovering from a hit
    if(recovering == false && Malcom1.hitTestObject(Leaf1)){
        Health--;
        recovering = true;
        setTimeout(recover, 3000);
    }
}
function recover():void {
    recovering = false;
}

你在回答你自己的问题:让他免疫3秒钟是解决办法

因为应该减少马尔科姆的helath,健康应该是马尔科姆的一个属性,而不是一些独立变量

创建一个类Malcolm。 为健康创建一个setter函数,该函数接受或不接受损害: 如果没有计时器运行,造成伤害并启动一个运行3秒的计时器。
如果计时器正在运行,则忽略损害。

使用TimerEvent,当Malcolm击中树叶时触发。在timerevent中有一个shield布尔变量,并将其设置为true。计时器应设置为3秒3000毫秒。因此,只要盾牌是真的,即在3秒钟内,马尔科姆就不会受到伤害。有一个TimerEvent.COMPLETE,它会在3秒后被调用,这里将你的shield变量设置为false。这样你就可以获得你的3秒无敌