我正在 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秒的无敌