在AS3中编写简单的AI

时间:2012-08-31 23:00:31

标签: actionscript-3 class artificial-intelligence frame enter

我正在尝试创建一个小游戏,您可以使用箭头键控制电路板周围的动画片段,同时还有很少的角色走来走去。

我有一个针对enterframe的事件监听器,它不断更新可以在电路板上移动的用户控制字符。我真正希望的是能够创建一个AI类来分配走动的角色。这个AI类将负责他们的移动,而不必添加除代码之外的其他代码,以便最初创建/添加AI movieclip实例到舞台。

到目前为止,我有一个AI类,所有角色类都作为基类扩展。是否有可能在此AI类中添加另一个enterframe事件侦听器,以便AI类可以处理所有AI运动?我的方向是错误的吗?

谢谢!

麦克

1 个答案:

答案 0 :(得分:4)

我说这是一个好方向。在您的AI类中,创建一个addedToStage侦听器,并在该处理程序中创建一个受保护或公共的ENTER_FRAME处理程序,如果您对不同的字符类型有不同的需求,则可以覆盖其部分行为。

public class CharacterBase extends Sprite {

    public function CharacterBase():void {
        this.addEventListener(Event.ADDED_TO_STAGE,addedToStage,false,0,true);
        this.removeEventListener(Event.REMOVED_FROM_STAGE,removedFromStage,false,0,true);
    }

    private function addedToStage(e:Event):void {
        this.addEventListener(Event.ENTER_FRAME,enterFrameHandler, false,0,true);
    }

    private function removedFromStage(e:Event):void {
        this.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    }

    protected function enterFrameHandler(e:Event):void {
        //do your AI moving around logic
        walk();
    }

    protected function walk():void {
        this.x += 2;  //the default walk behavior
    }
}

覆盖默认动作的角色:

public class Character1 extends CharacterBase {
    public function Character1():void {
        super();
    }

    override protected function walk():void {
        this.x += 5; //this character needs to be faster than default
    }
}