我在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秒才能让生命值下降呢?
发布于 2015-01-23 06:02:56
从概念上讲,你想让你的角色在命中后立即暂时所向披靡。若要执行此操作,可以在每次命中角色时将计数器设置为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;
}发布于 2015-01-23 06:09:07
你在回答你自己的问题:让他免疫3秒是解决方案。
因为应该减少的是malcolm的helath,健康应该是malcolm的属性,而不是某个独立的变量。
创建一个类Malcolm。创建一个健康设置函数,它要么接受伤害,要么不接受:如果没有计时器运行,处理伤害并启动一个运行3秒的计时器。如果有计时器在运行,忽略损坏。
发布于 2015-01-24 01:01:10
使用当马尔科姆击中树叶时触发的TimerEvent。在timerevent内部有一个屏蔽布尔变量,并将其设置为true。计时器应设置为3秒(3000毫秒)。所以只要屏蔽是真的(即)在3秒内马尔科姆不会受到伤害。有一个在3秒后调用的TimerEvent.COMPLETE,这里将您的屏蔽变量设置为false。这样你就可以获得3秒的战无不胜
https://stackoverflow.com/questions/28098655
复制相似问题