Actionscript 3 当玩家在敌人身上时,生命值每3秒下降一次
我在ActionScript3中制作了一个游戏,本质上我试图让它在角色Malcolm1碰到敌人Leaf1时,生命值下降1,但是我只希望在Malcolm1上次击中Leaf1已经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
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秒无敌