我在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秒钟,因为他们最后一次碰撞让健康状况下降?
答案 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秒的无敌