使用AS3编程实现简单AI

我正在尝试制作一个小游戏,玩家可以通过箭头键控制一个影片剪辑在棋盘上移动,同时棋盘上还有其他小角色在走动。

我已经为enterframe事件设置了一个事件监听器,它会不断更新用户控制的角色,使其能够在棋盘上移动。我真正希望的是能够创建一个AI类,分配给那些在棋盘上走动的角色。这个AI类将负责它们的移动,而我只需要添加初始创建/添加AI影片剪辑实例到舞台的代码即可,不需要额外的代码。

到目前为止,我已经有一个所有角色类都继承的AI类作为它们的基础类。是否可以在这个AI类中添加另一个enterframe事件监听器,这样AI类就可以处理所有AI的移动?我走的方向对吗?

谢谢!

@Mike


回答:

我认为这是个好的方向。在你的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 {        //执行AI移动逻辑        walk();    }    protected function walk():void {        this.x += 2;  //默认的移动行为    }}

一个覆盖默认移动的角色:

public class Character1 extends CharacterBase {    public function Character1():void {        super();    }    override protected function walk():void {        this.x += 5; //这个角色需要比默认速度快    }}

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注