Re: [問題] 數字鍵盤
※ 引述《zswolf (響徹雲霄的喇叭聲)》之銘言:
: 我試了一下丟假的keyboardEvent可行耶
: init()
: function init(){
: stage.addEventListener(MouseEvent.CLICK,stageClick)
: stage.addEventListener(KeyboardEvent.KEY_DOWN,fakeKey)
: }
: function stageClick(_e:MouseEvent){
: stage.dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_DOWN,true,false,0,0))
: }
: function fakeKey(_e:KeyboardEvent){
: txt.text=_e.keyCode.toString()
: }
: 這樣就收的到假的keyboardEvent了
: 不過我想了一下原Po的問題
: 為何一定要丟keyboardEvent出去@@
: 有點不太懂
: ※ 引述《etrexetrex (moonet)》之銘言:
: : 我剛才試了一下
: : function simulateKeyDown(keyCode:uint):void{
: : var e:KeyboardEvent =
: : new KeyboardEvent( KeyboardEvent.KEY_DOWN,
: : true,
: : false,
: : keyCode,
: : 0 );
: : stage.dispatchEvent( e );
: : }
: : function whenMouseDown(event:MouseEvent):void{
: : simulateKeyDown(65);
: : }
: : stage.addEventListener(MouseEvent.MOUSE_DOWN, whenMouseDown);
: : 實驗結果:
: : 畫面中有個文字方塊,我用滑鼠點他,卻沒有A出現在文字方塊裡
: : 結論:
: : 實驗失敗
@@ 我不太懂耶,為什麼要在stage dispatch event?
不是應該在文字框上dispatch,然後文字框listen to event嗎@@?
我這樣就成功了
按鈕0是bb, 文字框是tt:
import flash.events.KeyboardEvent;
bb.addEventListener(MouseEvent.CLICK, bbb);
tt.addEventListener(KeyboardEvent.KEY_DOWN, ttt);
//addEventListener(KeyboardEvent.KEY_DOWN, ttt);
function bbb(e:MouseEvent):void{
tt.dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_DOWN,true,false,
48,96,0,false,false,false));
}
function ttt(e:KeyboardEvent):void{
//trace("囧rz");
tt.text = String.fromCharCode(e.charCode).toString();
}
說明:
"0"的charcode是48, keycode是96
我覺得不應該在stage上dispatch, 原因如下:
請先看此:http://bit.ly/9C7q39
看完了我來解釋:
dispatch要這樣用:target.dispatch()
這樣事件傳遞到display list時,才知道要傳到哪個target上。
注意看連結的圖,非target的沒反應。
另外addEventListener可以偵聽在capture階段或是target-bubble階段(預設是target與
bubble階段)
見此:http://bit.ly/cFFf2R
所以可以試試看把我打的程式註解的地方執行,可以看到ttt()會執行兩次
也可以把那行改成:addEventListener(KeyboardEvent.KEY_DOWN, ttt, true);
這樣就會在事件跑到tt之前先處理了一次,一樣總共執行兩次。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 115.43.53.101
※ 編輯: Jerrynet 來自: 115.43.53.101 (05/16 03:40)
討論串 (同標題文章)