使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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