因此,這裏是我的設置:AS3 KeyboardEvents不點火,直到我點擊了屏幕上的按鈕後
我的文檔類是Main.as(它擴展了影片剪輯)。以下代碼位於我的Main.as.
我已經宣佈所有這些變量在我的類定義:
private var holder:MovieClip;
private var leftButton:SimpleButton;
private var rightButton:SimpleButton;
在構造
...
holder = new MovieClip();
addChild(holder);
holder.addEventListener(KeyboardEvent.KEY_UP, handleKeyboardEvent);
leftButton = new Arrow();
rightButton = new Arrow();
holder.addChild(leftButton);
holder.addChild(rightButton);
leftButton.x = 50;
leftButton.rotation = 180;
rightButton.x = 150;
leftButton.y = rightButton.y = 50;
leftButton.addEventListener(MouseEvent.CLICK, handlePaging);
rightButton.addEventListener(MouseEvent.CLICK, handlePaging);
...構造外...
public function handleKeyboardEvent (e:KeyboardEvent) {
trace("got a keyboard event");
trace("e.charCode : " + e.charCode);
trace("e.keyCode : " + e.keyCode);
switch (e.keyCode) {
case 37: //left arrow
showPreviousMoment();
break;
case 39: //right arrow
showNextMoment();
break;
}
}
這兩個按鈕是我在圖書館中使用的Arrow動畫片段的實例。箭頭影片剪輯僅包含圖形(在其屬性對話框中,基類爲flash.display.SimpleButton)。
我希望用戶能夠按下屏幕上的箭頭或鍵盤上的箭頭鍵來向前和向後翻頁。
因此......當我測試電影或將其發佈爲應用程序時,按下左右鍵盤鍵不會執行任何操作。但是......在我點擊屏幕箭頭後,鍵盤事件正在被拾起!我的鍵盤事件最初怎麼沒有收到?爲什麼點擊屏幕上的按鈕會使'持有人'開始接收事件?
UPDATE
我也只是註釋掉所有代碼除了實例化「持有人」並添加監聽器。 持有者未聽到KeyboardEvents。
UPDATE ... ANSWER
於是我發現,如果我想在全球範圍內聽到的KeyboardEvent,我要註冊舞臺監聽。所以,這並獲得成功:
stage.addEventListener(KeyboardEvent.KEY_UP, handleKeyboardEvent);
從科林·穆克的書信息:
觸發 應用範圍的命令 通常在全球範圍處理,通過與Flash 球員的註冊 監聽鍵盤輸入事件階段實例。相比之下,觸發 特定界面元素響應 的鍵盤輸入事件通常由向 當前具有鍵盤焦點的對象註冊的偵聽器 處理。
所以我想,在我最初的版本中,當我點擊屏幕上的箭頭按鈕,我不知何故給了鍵盤焦點的'持有人;。
你確定它是點擊使鍵盤事件工作的箭頭,而不是單擊flash動畫中的任何東西嗎?因爲它聽起來像你需要讓閃光窗口處於焦點狀態才能使鍵盤事件起作用。嘗試單擊Flash影片中的其他內容(不是箭頭),然後測試點擊鍵盤箭頭,如果這有效,這意味着代碼沒有任何問題,並且所有內容都按照預期運行。 – SimplyZ 2011-04-22 19:03:54
我忘了提及它不是焦點問題。我點擊了電影窗口的不同部分,並且不會「激活」按鍵。只有在點擊屏幕上的按鈕之後,按鍵纔會激活。 – milesmeow 2011-04-22 19:05:52
您可以將handlePaging函數添加到問題中嗎?也許它是在那裏激活鍵盤事件的東西。 (只是一個瘋狂的猜測) – SimplyZ 2011-04-22 19:15:34