2016-04-12 35 views
1

我的目標是:方法(函數)在子類中沒有被調用鼠標事件

  1. 定義Sprite的子類,稱爲船舶
  2. 使用事件在運行到這個新類中調用一個函數

看來我已經想出瞭如何使用鏈接的.as文件中的包創建我的Ship類。但我似乎無法訪問該類中的函數。任何人都可以看到我做錯了什麼?

var ShipMc:Ship = new Ship(); 
addChild(ShipMc);// This successfully adds an instance, so I know the class is working. 
addEventListener(MouseEvent.CLICK, ShipMc.addShip);//But this doesn't seem to run the function 

此代碼適用於實例化Sprite,但Ship.as文件中的代碼(特別是函數)不起作用。沒有運行時錯誤,但沒有跟蹤到輸出窗口。

package 
{ 
    import flash.display.Sprite 

    public class Ship extends Sprite 
    { 
     public function addShip():void 
     { 
      trace("running addShip function")  
     } 
    } 
} 

上一次在閃存中編碼的東西是AS2!

我只是提到我已經嘗試過使用addShip():void而只是addShip()。兩者都有同樣的反應。應該是:void,對吧?無論如何,沒有人拋出這個事實,告訴我這段代碼甚至沒有被閱讀,我想。

任何幫助非常感謝!把我的頭髮拉出來。

回答

1

你的代碼不工作,因爲它包含一些問題,所以讓我們看看。

你應該知道,你正在連接的MouseEvent.CLICK事件偵聽主時間軸不含有任何可點擊的對象?現在(它是空的),所以讓我們通過添加一些你Ship類,以避免啓動:

public class Ship extends Sprite 
{ 
    // the constructor of your class, called when you instantiate this class 
    public function Ship() 
    { 
     // this code will draw an orange square 100*100px at (0, 0) 
     graphics.beginFill(0xff9900); 
     graphics.drawRect(0, 0, 100, 100); 
     graphics.endFill(); 
    } 
    public function addShip():void 
    { 
     trace("addShip function run"); 
    } 
} 

NB:您可以將MouseEvent.CLICK事件偵聽器附加到舞臺,即使你有沒有在舞臺,這將正常工作。

現在,如果您測試應用程序,則會在舞臺左上角獲得一個可點擊的橙色正方形,但是編譯器會觸發錯誤(ArgumentError),因爲它正在等待偵聽器功能(Ship.addShip()函數這裏)接受一個MouseEvent對象。

因此,爲了避免這個錯誤,你Ship.addShip()功能,可就是這樣的例子:

public function addShip(e:MouseEvent):void 
{ 
    trace("addShip function run"); 
} 

那麼你的代碼應該工作。

您還可以簡化在你的主代碼中使用其它監聽功能的東西,它可以調用Ship.addShip()功能,像這樣的例子:

var ShipMc:Ship = new Ship(); 
addChild(ShipMc); 

addEventListener(MouseEvent.CLICK, onMouseClick); 

function onMouseClick(e:MouseEvent): void 
{ 
    ShipMc.addShip(); 
} 

更多關於這一切,你可以採取一個看AS3 fundamentals你可以在哪裏找到你需要知道的關於AS3的所有信息。

希望能有所幫助。

+0

謝謝。非常感激。 –

+0

@Neal如果這解決了你的問題,請點擊左邊的勾號以接受它作爲答案。 – null

相關問題