2012-08-31 73 views
1

我正在嘗試創建一個小遊戲,你可以用箭頭鍵控制棋盤周圍的動畫片段,同時還有小角色四處走動。在AS3編程一個簡單的AI

我有一個enterframe的事件監聽器,它不斷更新可以在棋盤上移動的用戶控制角色。我真正希望的是能夠創建一個AI類以分配給四處走動的角色。這個AI類將負責他們的移動,而不需要添加代碼以外的其他代碼來最初創建/添加AI動畫片段實例到舞臺。

到目前爲止,我有一個AI類,所有字符類都作爲其基類擴展。有沒有辦法在這個AI類中添加另一個enterframe事件監聽器,這樣AI類可以處理所有的AI運動?我會走錯方向嗎?

謝謝!

Mike

+1

你可以有很多ENTER_FRAME監聽器/處理器,只要你願意 – BadFeelingAboutThis

回答

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 
    } 
} 
+0

這工作就像一個魅力。非常感激!我會贊成你的回答,但我沒有足夠的聲譽點無足輕重 – Mike