[英]Flash & Flex SDK/AS3 - How to keep keyboard focus?
我正在Flex / AS3中編寫一個flash應用程序,我似乎無法為其分配鍵盤焦點。 我在開發早期就注意到了這個問題,並添加了一個帶有“立即播放”按鈕的啟動畫面,以吸引用戶點擊。 但是,用戶必須再次單擊應用程序才能使鍵盤正常工作!
更糟糕的是,我有一個游戲中的快捷方式,可以返回主菜單。 如果您返回主菜單然后單擊“立即播放”按鈕,SWF將再次失去焦點!
我可能搞亂兒童物體或意外破壞捕獲鍵盤焦點的物體,但我不太確定它是如何工作的。 你能指點我正確的方向嗎?
我的應用程序是一個.SWF文件,我直接在我的瀏覽器中運行它(不是通過網頁調用它,盡管我最終會這樣做)。 這是有問題的文件:
http://www.space-squid.com/game/Main.swf當您單擊“正常”時,您必須再次單擊以實際獲取鍵盤焦點。 :( 隨意問的問題!
編輯:這是我正在使用的一些代碼。
在我的主要類中執行的一些第一個代碼:
empty_sprite = new Sprite();
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
我也試過這個以防萬一我應該在我的根對象上設置鈎子:
this.stage.addEventListener(keyboard hooks...);
如果其他空的精靈導致問題:
background_image = new BackgroundImage();
background_image.x = etc etc alignment data;
addChild(background_image);
background_image.stage.addEventListener(keyboard hooks...)
在所有這些例子中,我的鍵盤掛鈎工作正常,只要我第二次點擊..但絕不是第一次。 :(
第二次編輯:我把問題縮小了。 也許有人可以幫我解決這個問題,這可能是一個結構問題:
public function Main {
Some stuff...
empty_sprite = new Sprite(); // Create a new stage sprite
addChild(empty_sprite);
empty_sprite.stage.addEventListener(keyboard hooks...);
addChild(BackgroundImage); // I lay down my background image which is persistant
addChild(PlayNowButton); // I display my PlayNow button to the screen
More stuff...
}
public function StartGame() {
removeChild(PlayNowButton); // This is the point of failure; this removes focus.
removeChild(otherMenuOptions);
...
addChild(gameComponents);
}
正如您所看到的,我創建了“立即播放”按鈕 - 它似乎成為焦點對象。 我的鍵盤事件沒有被捕獲,因為它是尋找焦點的背景。 不確定這是否有意義,希望有人可以用這個來理順我!
如果我注釋掉那一行(removeChild(PlayNowButton))游戲工作得很好並且保持鍵盤焦點 - 在屏幕上永久覆蓋“playnow”按鈕的缺點。
說實話,我甚至不確定游戲本身是否能夠專注於第一次點擊,但我不確定如何測試。
您正在尋找的代碼是:
gameWorldObject.stage.focus = this;
由於Flash已獲得焦點,因此您的鍵盤事件處理程序根本不會集中在Flash應用程序本身中。 您可以使用上面的代碼切換當前焦點在應用程序中的位置。
或者,不是破壞PlayNow按鈕,而是使其不可見將成功。 然后在需要時再次將其顯示出來。 如果它是MovieClip或Sprite對象,則非常簡單:
PlayNowButton.visible = false; // or true obviously, as the case may be
(用這種方式寫給自己很難)
我假設這是一個瀏覽器項目?
我是這樣做的:
package com.whatever.utilities {
import flash.external.ExternalInterface;
public class Browsers {
public static function FocusThisSwf():void {
if(!ExternalInterface.available)
return;
ExternalInterface.call("eval", "document.getElementById('" +
ExternalInterface.objectID + "').focus()");
}
// ...
}
//...
}
任何打嗝,請確保您的嵌入/對象標記具有ID和名稱屬性!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.