首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当玩家处于敌人状态时,生命值每3秒下降一次

当玩家处于敌人状态时,生命值每3秒下降一次
EN

Stack Overflow用户
提问于 2015-01-23 05:05:40
回答 3查看 54关注 0票数 0

我在ActionScript 3中做了一个游戏,基本上我是想让它在角色( Malcolm1 )接触敌人( Leaf1 )时生命值下降1,但是我希望这只发生在距离Malcolm1上次命中Leaf1已经有3秒的时候,这样他就可以获得3秒的免疫力,所以他的生命值不会立即下降,这是我现在的代码:

代码语言:javascript
复制
 Malcolm1.addEventListener( Event.ENTER_FRAME, leafhitmalcolm) function
 leafhitmalcolm( e:Event ):void {
     if(Malcolm1.hitTestObject(Leaf1))
     {
         Health = (Health - 1)  
     }  
 }

我怎么才能做到距离他们最后一次碰撞至少3秒才能让生命值下降呢?

EN

回答 3

Stack Overflow用户

发布于 2015-01-23 06:02:56

从概念上讲,你想让你的角色在命中后立即暂时所向披靡。若要执行此操作,可以在每次命中角色时将计数器设置为3秒(3 * frameRate),然后在每一帧递减计数器直到其达到0,并且仅在其为0时记录命中。

代码语言:javascript
复制
var hitDelay:int = 0;
function leafhitmalcom(e:Event):void {
    if(hitDelay > 0) {
        hitDelay--;
    } else if(Malcolm1.hitTestObject(Leaf1)) {
        Health--;
        hitDelay = 3 * frameRate;
    }
}

或者,您可以以类似的方式使用3000毫秒的计时器:

代码语言:javascript
复制
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;
}
票数 0
EN

Stack Overflow用户

发布于 2015-01-23 06:09:07

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

因为应该减少的是malcolm的helath,健康应该是malcolm的属性,而不是某个独立的变量。

创建一个类Malcolm。创建一个健康设置函数,它要么接受伤害,要么不接受:如果没有计时器运行,处理伤害并启动一个运行3秒的计时器。如果有计时器在运行,忽略损坏。

票数 0
EN

Stack Overflow用户

发布于 2015-01-24 01:01:10

使用当马尔科姆击中树叶时触发的TimerEvent。在timerevent内部有一个屏蔽布尔变量,并将其设置为true。计时器应设置为3秒(3000毫秒)。所以只要屏蔽是真的(即)在3秒内马尔科姆不会受到伤害。有一个在3秒后调用的TimerEvent.COMPLETE,这里将您的屏蔽变量设置为false。这样你就可以获得3秒的战无不胜

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28098655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档