0
我試圖製作一個坦克遊戲,在其中我可以移動坦克,讓他們互相拍攝等等......我堅持使用Flash Pro創建外部類,因爲我習慣使用OOP語言像Java一樣。我創造了代表所有坦克的坦克類。這裏是這個類的代碼:ActionScript3外部類鍵盤監聽器
package src
{
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Tank extends MovieClip
{
public function Tank():void {
this.addEventListener(KeyboardEvent.KEY_DOWN, move);
this.addEventListener(MouseEvent.CLICK, test);
}
protected function move(event:KeyboardEvent):void {
trace("key down");
switch (event.keyCode) {
case Keyboard.UP: {
this.y += -5;
break;
}
case 40: {
this.y += 5;
break;
}
case Keyboard.LEFT: {
this.x += -5;
break;
}
case Keyboard.RIGHT: {
this.x += 5;
break;
}
}
}
}
}
問題是,當我按任意鍵時,動作偵聽器似乎永遠不會被調用。 trace()不被調用。但我試圖添加一個鼠標監聽器來測試它,它工作。所以我猜它是Keyboard事件監聽器類的問題?我在網上看到的每個人都使用stage.addEventListener(KeyboardEvent.KEY_DOWN,move)方法。
有人能告訴我爲什麼它不起作用嗎?有沒有解決方法?(只能通過添加外部類)謝謝!
是的,我的工作!但是,它如何在「這個」上不起作用呢? – fall
在您的示例中,'Tank'實例將鍵盤監聽器添加到自己 - 這意味着它們需要具有鍵盤焦點來接收鍵盤事件。請參閱:[Stage.focus()](http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/display/Stage.html#focus) –
「this」是一個指向運行代碼的對象實例。在你發佈的例子中,「this」是指坦克的單個實例。 「this」是ActionScript中的隱式引用,實際上並不需要。 「stage.addEventListener」與「this.stage.addEventListener」相同。 – HotN