簡體   English   中英

雪碧未收到鍵盤事件

[英]Sprite not receiving Keyboard events

我有一個Sprite ,它是Flex對象的子代,並充當“游戲窗口”的主窗口。 因此,在玩游戲時,它應該獲得鍵盤輸入,但在其他時候則不能。 當我向它添加鍵盤監聽器時,它永遠不會觸發。

我是否需要停止父對象以某種方式或類似方式“吃”事件? 鼠標滾輪事件我也得到了同樣的結果,但是鼠標單擊事件很好。 除非我錯過了,否則Sprite似乎沒有焦點的概念。

更普遍地說,是否有關於最佳方法的建議? 例如,在進入游戲窗口之前可能仍需要截取一些鍵,例如ESC或F1之類的東西……目的是游戲窗口不知道其他UI。

您的精靈需要具有輸入焦點才能接收鍵盤事件。

最佳做法:如果整個應用程序都是基於鍵盤輸入的,並且不必切換上下文(如果選擇了另一個對象,則相同的鍵意味着不同的事情),則只需將偵聽器添加到階段。

否則,您可以使用stage.focus將焦點設置為所需的對象。

為了使您的精靈可以集中顯示,您需要實現接口mx.managers.IFocusManagerComponent 否則,Tab鍵將不適用於子畫面。 根據Adobe文檔:

IFocusManagerComponent接口定義了可聚焦組件必須實現的接口,以便從FocusManager接收焦點。

您可以查看UIComponent中的代碼,以了解它們如何實現IFocusManagerComponent中定義的功能。

您應該真正在根應用程序或階段上監聽鍵盤事件。 由於actionscript具有適當的事件冒泡,因此您始終可以確保事件會到達那里(如果文本框或其他輸入未使用它們)。 您可以通過將事件偵聽器添加到舞台上(當您需要它們作為精靈時),然后將它們從舞台中刪除,來模擬它們直接在精靈上。

或者,您可以將關鍵偵聽器保留在舞台上,並在應用程序的上下文更改時更改context變量。 然后,在應用程序context中條件化事件偵聽器的操作。 這樣做的一個主要優點是,所有關鍵事件邏輯都在同一位置,並且可以更輕松地進行調試。

至於鼠標滾輪,如果您打算將游戲嵌入其他網站,則最好不要擔心。 他們可能不會讓您安裝一些js hack使其在Mac上運行。 否則,請獲取SWFObject附加組件:Mac OS上的MouseWheel。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM