2010-08-14 121 views
0

我正在編寫一個純粹的動作在記事本與flex作爲編譯器。下面的代碼我有鍵盤輸入與actionscript

package 
{ 
import flash.display.*; 
import mx.core.*; 
    import flash.events.*; 
import mx.collections.*; 
import flash.geom.*; 
import mx.controls.*; 
import flash.text.*; 
import mx.events.*;  
import mx.styles.*;  
import mx.containers.*; 

public class MAIN extends Sprite 
{ 
    public var APPLICATION:Application = Application(Application.application); 
    public var FRAME:int = 0; 
    public function MAIN() 
    { 
    addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
    STEP(); 
    } 
    public function STEP():void 
    { 
    FRAME ++; 
    STEP(); 
    } 
    public function keyDownHandler(event:KeyboardEvent):void 
    { 
    var keyDownText:TextField = new TextField(); 
    keyDownText.text = "Key code: " + event.keyCode; 
    this.addChild(keyDownText); 
    } 
} 
} 

我要的是什麼關鍵我正好按在屏幕上繪製(儘管實際上我認爲這將只是它對應的ASCII數字,但是這並不重要)。現在儘管一切都空白。另一件事是因爲我沒有使用任何mxml我不知道我是否已經正確建立了遊戲循環,所以讓我知道是否需要修復。

回答

1

嘗試

stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 

,而不是

addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 

因爲你的精靈沒有一塊可視面積,也不會收到鍵盤或鼠標輸入。

此外,STEP()函數將導致一個計算器因爲它是無限遞歸的。

如果您想要定期調用主循環,請嘗試使用ENTER_FRAME處理程序或Timer。

事情是這樣的:爲什麼你正在使用的一些方法和變量全部大寫

removeEventListener(Event.ENTER_FRAME,STEP); 

不確定:

public function MAIN() 
{ 
    addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
    addEventListener(Event.ENTER_FRAME,STEP); 
} 

private function STEP(e:Event):void { 
    FRAME++; 
} 

要停止它,做到這一點。雖然它不是語言要求,但所有大寫通常都是爲常量保留的。方法名稱使用camelCase。並且類型使用PascalCase(像camelCase,但是第一個字母大寫)。所以你的班級將是Main,FRAME將會是fram,STEP會是step,等等。我認爲你最好堅持這些常見的命名方案。

另一件事。每次你想輸出一些文本時,你可能不應該創建一個新的TextField實例。我想,一個文本框會對你的情況做到這一點。因此,在您啓動課程時調用某種init方法時,創建並添加文本字段,然後使用此文本字段的text屬性編寫消息。