2013-04-13 54 views
1

在課堂中使用鼠標點擊事件時遇到問題,我是動作腳本的絕對初學者。動作腳本3.0類事件包中的鼠標事件

我想要的是,如果我點擊btn_MClick按鈕,它應該運行腳本,但每次我點擊它,我都會收到btn_MClick未定義的錯誤消息。

btn_MClick是在舞臺上,並用實例名稱如果btn_MClick

public class gunShip1 extends MovieClip 
{ 
    var moveCount = 0; 

    public function gunShip1() 
    { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, moveGunShip1); 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, ShootGunShip1) 
        btn_MClick.addEventListener(MouseEvent.MOUSE_DOWN.KEY_DOWN, ShootGunShip1);; 

    } 


function ShootGunShip1(evt: MouseEvent) 
{ 


      var s_Bullet:survBullet = new survBullet(); 
      var stagePos:Point = this.localToGlobal (new Point(this.width/2-10, this.height));; 
      s_Bullet.x = stagePos.x; 
      s_Bullet.y = stagePos.y; 

      parent.addChild(s_Bullet); 
      //play sound 
      var gun_sound:ricochetshot = new ricochetshot(); 
      gun_sound.play(); 
     } 
} 

請,我完全不知道該怎麼做,不知何故感覺整個過程是錯誤的。

回答

1

您的類gunShip1沒有屬性btn_MClickroot或文檔類。

基本上發生了什麼是你已經把你的按鈕放在舞臺上,這使得它成爲屬於根容器的實例。目前,您正試圖將該按鈕稱爲gunShip1的屬性。

你應該在這裏真正做的是將按鈕點擊單獨管理到gunShip1,並使單獨的代碼調用方法gunShip1。例如,你可以在你的文檔類有這樣的:

public class Game extends MovieClip 
{ 

    private var _ship:gunShip1; 


    public function Game() 
    { 
     _ship = new gunShip1(); 

     // The Document Class will have reference to objects on the stage. 
     btn_MClick.addEventListener(MouseEvent.CLICK, _click); 
    } 


    private function _click(e:MouseEvent):void 
    { 
     _ship.shoot(); 
    } 

} 

然後更新的shoot方法gunShip1

public function shoot():void 
{ 
    var s_Bullet:survBullet = new survBullet(); 
    var stagePos:Point = this.localToGlobal (new Point(this.width/2 - 10, this.height)); 
    s_Bullet.x = stagePos.x; 
    s_Bullet.y = stagePos.y; 
    parent.addChild(s_Bullet); 

    var gun_sound:ricochetshot = new ricochetshot(); 
    gun_sound.play(); 
} 

的想法是,gunShip1不應該負責處理用戶輸入(鼠標,鍵盤等)。相反,這應該是一個單獨的類,它通知gunShip1它應該做些什麼。

+0

感謝您的迅速回復,我現在明白好多了,感謝您的幫助。我如何使這個工作在一個動作腳本而不是一個不同的類,因爲我所有的按鈕和影片剪輯都在同一頁 – Martin

+0

因爲我仍然有一個錯誤「訪問未定義的屬性btn_MClick」,同時有一個不同的類來處理鼠標點擊 – Martin