我正在尝试制作一个小游戏,玩家可以通过箭头键控制一个影片剪辑在棋盘上移动,同时棋盘上还有其他小角色在走动。
我已经为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; //这个角色需要比默认速度快 }}