as3.0键盘事件问题,可能涉及一些as的机理问题
我简化了一下问题,比如我有3个帧,标为1,2,3帧,在第1帧上stage有一个鼠标事件,单击跳转到第二帧;在第二帧上stage有两个事件,一个鼠标事件,单击跳转到第三帧,...
我简化了一下问题,比如我有3个帧,标为1,2,3帧,在第1帧上stage有一个鼠标事件,单击跳转到第二帧;在第二帧上stage有两个事件,一个鼠标事件,单击跳转到第三帧,一个键盘事件,按下backspace跳到第一帧;在第三帧上stage有一个事件,按下backspace跳转到第一帧。现在进行如下操作,在第一帧上单击跳转到第二帧,再单击跳转到第三帧,再按下backspace返回第二帧,问题出现了,当我在第二帧按下backspace却不能跳转到第一帧了,这是怎么回事,我试过如果把第二帧的键盘事件改为按下其他键(比如escape)就能正常跳转了,是不是一个按键不能触发不同的函数,不然就会打架?求懂as3.0机理的朋友解答下,有什么解决办法没?代码如下
第一帧
stop();
stage.addEventListener(MouseEvent.CLICK,Play);
function Play(e:MouseEvent){
play();
}
第二帧
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back1);
stage.addEventListener(MouseEvent.CLICK,Play);
function back1(e:KeyboardEvent){
switch(e.keyCode){
case Keyboard.BACKSPACE:
gotoAndStop(1);
break;
default:
break;
}
}
第三帧
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back2);
function back2(e:KeyboardEvent){
switch(e.keyCode){
case Keyboard.BACKSPACE:
gotoAndStop(2);
break;
default:
break;
}
} 展开
第一帧
stop();
stage.addEventListener(MouseEvent.CLICK,Play);
function Play(e:MouseEvent){
play();
}
第二帧
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back1);
stage.addEventListener(MouseEvent.CLICK,Play);
function back1(e:KeyboardEvent){
switch(e.keyCode){
case Keyboard.BACKSPACE:
gotoAndStop(1);
break;
default:
break;
}
}
第三帧
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back2);
function back2(e:KeyboardEvent){
switch(e.keyCode){
case Keyboard.BACKSPACE:
gotoAndStop(2);
break;
default:
break;
}
} 展开
4个回答
展开全部
呃,说起来是很简单的问题,主要我有个习惯,添加一个监听后,需要在适宜的时机将监听移除,你的键盘监听事件在执行后,把它移除就行了,我大概改了一下,你试试吧
第一帧:
import flash.events.MouseEvent;
stop();
stage.addEventListener(MouseEvent.CLICK,Play);
function Play(e:MouseEvent)
{
play();
}
第二帧:
import flash.events.MouseEvent;import flash.events.KeyboardEvent;
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back1);
stage.addEventListener(MouseEvent.CLICK,Play);
function back1(e:KeyboardEvent)
{
switch(e.keyCode)
{
case 32:
gotoAndStop(1);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,back1);
break;
}
}
第三帧:
import flash.events.KeyboardEvent;
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back2);
function back2(e:KeyboardEvent)
{
switch(e.keyCode)
{
case 32:
gotoAndStop(2);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,back2);
break;
}
}
如果还有问题再问吧 ,说白了,你在第二次点击空格的时候,两个监听都监听到了,于是不知道执行哪一个
第一帧:
import flash.events.MouseEvent;
stop();
stage.addEventListener(MouseEvent.CLICK,Play);
function Play(e:MouseEvent)
{
play();
}
第二帧:
import flash.events.MouseEvent;import flash.events.KeyboardEvent;
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back1);
stage.addEventListener(MouseEvent.CLICK,Play);
function back1(e:KeyboardEvent)
{
switch(e.keyCode)
{
case 32:
gotoAndStop(1);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,back1);
break;
}
}
第三帧:
import flash.events.KeyboardEvent;
stop();
stage.focus=stage;
stage.addEventListener(KeyboardEvent.KEY_DOWN,back2);
function back2(e:KeyboardEvent)
{
switch(e.keyCode)
{
case 32:
gotoAndStop(2);
stage.removeEventListener(KeyboardEvent.KEY_DOWN,back2);
break;
}
}
如果还有问题再问吧 ,说白了,你在第二次点击空格的时候,两个监听都监听到了,于是不知道执行哪一个
展开全部
将stage.focus=stage改为stage.focus=this
我也不知道为什么是这样改的
我也不知道为什么是这样改的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是作用域及注册侦听事件的问题,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是不是在侦听函数执行后需要清楚事件侦听呢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询