AS3。如何在动画过程中逐步推动敌人?

Posted

技术标签:

【中文标题】AS3。如何在动画过程中逐步推动敌人?【英文标题】:AS3. How to push enemy step by step while during animation? 【发布时间】:2014-02-17 13:42:03 【问题描述】:

我正在创建 Flash 游戏。这是主要玩家英雄和敌人。这是一个完全动画的游戏,但我有一个问题,当英雄在攻击动画期间它应该逐步将敌人推回约 100 px。 现在我得到了:

点击“x”键开始攻击动画,直接将敌人的x坐标设置为+/-100像素。

这里大约有 100 帧,我需要在动画期间逐步将敌人推回去(在第一帧 -1 px,在第二帧 -2px,在第 57 帧 -57px 等......)。

代码如下:

if (Hero.leftx <= enemyRight && (Enemy.hitTestObject(Hero))) //here check if Hero have collision with Enemy 
                        
                        Hero.gotoAndStop("attack" + attack); //start attack animation   
                            Enemy.x += 100; //here push enemy by 100px
                            currentHPenemy -=  10;
                        

你有什么想法吗?

据我了解,我需要制作类似的东西,但我不知道如何正确制作:

if(currentFrame != totalFrames) 
Enemy.x += 100

【问题讨论】:

【参考方案1】:

你应该给你的敌人设置一个速度,让它在每一帧都以这个速度 * frameLength 移动。

【讨论】:

谢谢你的回答,能给我一个代码示例吗?非常感谢。【参考方案2】:

在你的敌人类中有一个 hitBack() 函数,它向你的电影剪辑添加一个 Event.ENTER_FRAME 侦听器并将计数器设置为 0。在 enterframe 函数中,使这个敌人的 x 位置增加 1,然后当计数器达到 100 , 移除 EVENT.ENTER_FRAME 监听器。

public class Enemy 

    private var count = 0;

    public function hitBack()
    
       count = 0;
       this.addEventListener(Event.ENTER_FRAME, myEnterFrame);
    

    private function myEnterFrame(e)
    
       if (count == 100) this.removeEventListener(Event.ENTER_FRAME, myEnterFrame);
       else 
       
          count++;
          this.x += 1;
       
    

那么你会这样称呼它

enemy.hitBack();

可能需要调整一两行,这超出了我的考虑范围。

【讨论】:

谢谢你的回答,你能给我举个例子吗?

以上是关于AS3。如何在动画过程中逐步推动敌人?的主要内容,如果未能解决你的问题,请参考以下文章

AS3 - 数组对象仍在更新?

Flash as3:使具有相同AS的敌人移动方式不同

如何在html5画布中逐步绘制线条动画

AS3 - 将影片剪辑放置在指定坐标

如何设置和使用 Flash AS3 文件

如何使用动画回收 SKSpriteNode