当玩家在敌人身上时,健康每3秒就会下降一次

时间:2015-01-22 21:05:40

标签: actionscript-3 flash actionscript

我在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 个答案:

答案 0 :(得分:0)

从概念上讲,你想让你的角色在击中后立即立即立于不败之地。要做到这一点,你可以在每次击中角色时将计数器设置为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;
}

答案 1 :(得分:0)

你正在回答你自己的问题:让他免疫3秒是解决方案。

由于它应该减少马尔科姆的健康,健康应该是马尔科姆的财产,而不是一些独立的变量。

创建一个班级Malcolm。 为健康创建一个setter函数,该函数接受或不接受: 如果没有Timer正在运行,请处理损坏并启动运行3秒钟的Timer。 如果计时器正在运行,请忽略损坏。

答案 2 :(得分:0)

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