作者Jerrynet (圣石小子)
看板Flash
标题Re: [问题] 数字键盘
时间Sun May 16 02:13:35 2010
※ 引述《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)