すべてのキーボードイベントを取る方法
Flex2でのキーボードイベントは、ActionScript2.0の頃のように、キーイベントをすべて取るのが少し難しくなっています。
すべてのキーボードイベントを取るには、stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp) を登録するのですが、
MXMLプロジェクトでは、
stage が null になっているため、アプリが起動した直後からイベントを取ることができません。
(ActionScriptプロジェクトでは、コンストラクタでstageが正しく設定されています。)
そこで、click イベントなどで取ると良いです。ゲームを作る時は、一度、画面をクリックさせるなどの工夫が必要かも
しれませんね。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" click="onClick()" > <mx:TextInput x="20" y="10" id="a_txt"/> <mx:Script><![CDATA[ import mx.core.UIComponent; private function onClick():void { a_txt.text = "ready"; stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); } private function onKeyUp(event:KeyboardEvent):void { a_txt.text = "code = " + event.keyCode; } ]]></mx:Script> </mx:Application>
あと、Flex2のマニュアルに載っている方法では、適当な
そこにフォーカスを移動させておくという方法が紹介されています。
確かに、この方法なら、creationCompleteイベントでフォーカスを指定できます。
先日、教えてもらった stageを参照できるすばらしい方法です。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> creationComplete="completeHandler()"> <mx:Script> <![CDATA[ private function completeHandler():void { callLater(initializeHandler); } private function initializeHandler():void { trace(stage); // is not null } ]]> </mx:Script> </mx:Application>
参考)中国語ですが、以下のサイトが役に立ちました。
http://www.nshen.net/blog/article.asp?id=496
最近、flex2のページ探していると、中国のページが多くヒットします。
※幸いにも、英語以上に中国語が読めるので、没問題ですが。