2013-11-14 27 views
0

我對AS3很新,我正在嘗試製作一個簡單的Flash遊戲原型。目前,所有我想要做的就是讓閃光燈告訴我,它實際上是接收用戶的鍵盤輸入,但我遇到了以下2個問題:我在哪裏添加EventDispatcher和函數問題

  1. 在我行事件偵聽器到舞臺,我得到一個Error1061:調用可能未定義的方法addEventListener通過靜態類型類的引用。

    • 我的研究使我相信,這是因爲我的背層類不擴展EventDispatcher,但我無法擴展,因爲背層必須擴展MovieClip的
  2. 在同樣的精神,我想告訴代碼,當發生這樣的事件時,執行命名的函數,但是我得到一個錯誤1120,告訴我兩者都是未定義的屬性。

    • 我想這可能是因爲該類沒有擴展事件調度程序呢?

我的AS3的理解是所有自學的,我仍然努力學習語言的禮儀,所以我道歉,如果這是一個非常簡單的問題,但我一直沒能只是從谷歌搜索的工作還沒有找到答案。 這裏是我的代碼:

package { 

import flash.display.MovieClip; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 
import flash.display.Stage; 
import flash.events.EventDispatcher; 
public class Backlayer extends MovieClip 
{ 
Stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
Stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler); 

public function keyDownHandler(e:KeyboardEvent):void 
{ 
if(e.keyCode == Keyboard.LEFT) 
{ 
    trace("left pressed"); 
} 

else if(e.keyCode == Keyboard.RIGHT) 
{ 
    trace("right pressed"); 
} 

else if(e.keyCode == Keyboard.UP) 
{ 
    trace("up pressed"); 
} 

else if(e.keyCode == Keyboard.DOWN) 
{ 
    trace("down pressed"); 
} 

} 
public function keyUpHandler(e:KeyboardEvent):void 
{ 
if(e.keyCode == Keyboard.LEFT) 
{ 
    trace("left released"); 
} 

else if(e.keyCode == Keyboard.RIGHT) 
{ 
    trace("right released"); 
} 

else if(e.keyCode == Keyboard.UP) 
{ 
    trace("up released"); 
} 

else if(e.keyCode == Keyboard.DOWN) 
{ 
    trace("down released"); 
} 

} 
} 
} 

回答

0

影片剪輯並從繼承此事件,因此你的類應該也是如此。 請參閱:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html

以下行存在兩個問題:

Stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
Stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler); 

1)他們不是在函數體。

2)Stage.addEventListener表示您試圖調用Stage類的靜態函數。它應該寫成stage.addEventListener(調用存儲在屬性階段中的Stage類實例的函數)。

+0

謝謝,這讓我感動。 – Rith