【问题标题】:How to implement enemy behaviour based on type?如何实现基于类型的敌人行为?
【发布时间】:2015-10-24 12:27:23
【问题描述】:

我正在构建一个游戏,它会创建三种类型的敌人。数量只有类型 3 可以射击其他人不能。这是我的敌人类

package 
{
    import flash.display.MovieClip;
    import flash.utils.getTimer;
    import flash.events.Event;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.geom.Point;


public class Enemy extends MovieClip
{
    private var lastTime:int;
    var hitCounter:Number = 1;
    public var eType:Number = 0;
    private var startYpos:Number = 0;

    var nextFire:Timer;
    var enemyType:Number;

    public var bullets:Array = new Array  ;

    var speedY:Number = 50;
    var enemySpeed:Number = 50;

    var firstPos:Number = 0;
    var fireCounter:Number = 0;
    var firePause:Number = 10;

    public function Enemy(xPos,yPos:Number,t:Number)
    {
        // constructor code
        this.x = xPos;
        firstPos = this.y = yPos;
        this.enemyType = t;
        lastTime = getTimer();
        this.gotoAndStop(t);

        addEventListener(Event.ENTER_FRAME,moveEnemy);
    }

    public function moveEnemy(event:Event)
    {
        // get time passed
        var timePassed:int = getTimer() - lastTime;
        lastTime +=  timePassed;
        // move bullet

        if (this.y + this.height / 2 > firstPos + 100 && speedY > 0)
        {
            speedY *=  -1;

        }

        if (this.y - this.height / 2 < firstPos && speedY < 0)
        {
            speedY *=  -1;
        }

        this.x -=  enemySpeed * timePassed / 1000;
        this.y +=  speedY * timePassed / 1000;

        // bullet past top of screen
        if (this.x - this.width / 2 < 0)
        {
            deleteEnemy();
        }

        if (this.enemyType == 3)
        {
            canFire();
        }
    }

    public function canFire()
    {
        if ((fireCounter > firePause))
        {
            MovieClip(parent).createEnemyBullet();
            trace((('Enemy Type : ' + enemyType) + ' and firing'));
            fireCounter = 0;
        }
        else
        {

            fireCounter++;
        }
    }

    public function deleteEnemy()
    {
        if (this.currentFrame == 2)
        {
            this.gotoAndStop(4);
        }
        else
        {

            //trace(MovieClip(parent).enemyKilled[this.enemyType-1]);
            MovieClip(parent).enemyKilled[this.enemyType - 1]++;
            MovieClip(parent).removeEnemy(this);
            parent.removeChild(this);
            removeEventListener(Event.ENTER_FRAME,moveEnemy);
        }
    }
  }
}

现在一旦一个 3 型敌人开始射击,那么每个敌人都开始射击。我只想要 3 型敌人不能射击其他敌人。我是怎么做到的? 提前致谢

补充:

public function createEnemyBullet()
    {           
        var bullet:Bullet = new Bullet(enemy.x - 10,enemy.y,500,-1);
        bullets.push(bullet);
        addChild(bullet);       

        //setEnemyBullet();
    }

【问题讨论】:

  • 我对这些信息的最佳猜测是,不需要的行为在函数“createEnemyBullet”中,你也可以发布那个函数吗?
  • canFire() 函数的真正作用是什么?
  • 在敌人类内部制造火焰@harilalkm
  • 所以你在那个函数上开枪/
  • 是的,它是@harilalkm

标签: actionscript-3 flash flash-cs5


【解决方案1】:

那你为什么不试试这样的东西。 `

public function canFire()
    {
        if(enemyType == 3){
            return;
           }
        if ((fireCounter > firePause))
        {
            MovieClip(parent).createEnemyBullet();
            trace((('Enemy Type : ' + enemyType) + ' and firing'));
            fireCounter = 0;
        }
        else
        {

            fireCounter++;
        }
    }

`

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 2023-01-04
    • 2022-07-11
    • 2015-07-11
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多