当玩家处于敌人状态时,生命值每 3 秒下降一次



我正在 ActionScript 3 中制作一个游戏,本质上我试图让它当角色 (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秒是解决方案。

由于应该减少的是马尔科姆

的海拉特,健康应该是马尔科姆的属性,而不是一些独立的变量。

创建类Malcolm 。为生命值创建一个接受或不接受伤害的二传手函数:如果没有计时器运行,造成伤害并启动运行 3 秒的计时器。如果有计时器正在运行,请忽略损坏。

从概念上讲,你想让你的角色在被击中后立即暂时立于不败之地。为此,您可以将计数器设置为每次命中角色时 3 秒 (3 * frameRate),然后每帧递减它直到达到 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;
}

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

最新更新