2013-03-24 36 views
0

所以我不得不用enter幀的問題,所以我把它移到一個單獨的類,這是一流的樣子引用舞臺內部的對象嗎?

package { 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.accessibility.Accessibility; 
    import flash.display.DisplayObject; 
    import flash.display.Stage; 


    public class enemy extends MovieClip { 

     public function enemy() { 
      // constructor code 

      this.addEventListener(Event.ENTER_FRAME, moveEnemy); 

     } 
    public function moveEnemy(e:Event):void{ 

     this.x += 5; 
     if(stage.player.scaleX == 1){ 
      this.scaleX = 1; 
      }else { 
       this.scaleX = -1; 
       } 

     } 
    } 

} 

現在我試着去調整根據玩家的ScaleX敵人,但我得到一個錯誤當在課堂內引用玩家時,任何人都可以幫我解決這個問題?

回答

1

使用Event.ENTER_FRAME偵聽器的訣竅是event.currentTarget將持有的鏈接對象多數民衆贊成處理事件,event.target將持有的鏈接,首家獲得它的對象,這樣你就可以將聽者不舞臺,而是指向您選擇的MovieClip,包括在遊戲中擁有多個單獨的偵聽器。比如說,你給Enemy級別的聽衆提供了一個查詢階段的玩家子彈列表,並且檢查碰撞this,玩家也可以這樣做。或者,您使用單個偵聽器並執行其中的所有工作,使用本地數組存儲敵人,子彈,玩家和其他對象的列表。

根據傳入參數進入幀監聽器 - 您的事件被自動調度,所以您不應該打擾這一點,它不接受多個參數。

關於您的代碼,您應該在查詢玩家碰撞下面的testPlayerCollisions()聽衆中添加敵方移動代碼。爲此,你已經有了一個敵人即將移動,所以你只需要調用它的move()函數或任何你有的東西。

+0

哦,感謝你回答,但我tryed與類添加了運動和它的工作!但是現在我遇到的這個問題很簡單,但我不知道,我是在試圖在球員在舞臺上時參考球員中的球員並且沒有自己的課程。你認爲你可以幫助我嗎? ?。 – AlanZ2223 2013-03-24 04:14:05

0

它看起來像你的敵人階級無法進入舞臺;但你正在嘗試引用stage.player。除非通過構造函數傳遞,否則可以從主類訪問舞臺,但不能從其他類訪問舞臺。

試着將舞臺傳遞給敵人類並創建一個類變量來存儲它。即:

private var stageInst:Stage; 

public function enemy(s:Stage){ 
    stageInst = s; 
} 

然後在moveEnemy使用stageInst.player來訪問播放器的剪輯。

當你創造敵人時,你必須從Main中傳遞一個舞臺實例。

即:var e:enemy = new enemy(stage);