我正在为作业创建类似DDR的游戏,我的键盘似乎会响应并跟踪它,但前提是我先用鼠标按下屏幕。
如何摆脱这种情况,让它立即响应呢?
right_mc
是正在移动的箭头ArrowRight_mc
是顶部的箭头perfect_mc
应该暂时弹出所以它应该是一个发光的箭头。
if(rightDown){
trace("right arrow");
if(right_mc){
if(right_mc.y >= ArrowRight_mc.y){
perfect_mc.visible = true;
glowRight_mc.visible = true;
}
}
}
答案 0 :(得分:4)
对于Flash开发人员来说,这是一个长期存在的问题。 Flash在检测键盘事件之前需要键盘焦点。
问题是,在用户点击SWF内的某个位置之前,浏览器不会将焦点放在SWF上。这确实有意义。我不希望我所在的网页失去焦点只是因为某处嵌入了flash影片。这是一个安全功能,用于阻止Flash横幅广告作为静音键记录器。然而,在某些情况下强迫焦点是有意义的,例如一个Flash游戏,它是HTML页面上唯一的东西。
通常,最好的办法是使用“播放”按钮启动菜单屏幕。这会强制用户在不知道此“焦点问题”的情况下单击SWF。
Adobe Technote - Giving keyboard focus to an embedded Flash movie上有更多信息。
*** **** EDIT Flash是否具有焦点,仅影响键盘事件。它不会影响运行代码,播放动画片段或播放声音/视频。
答案 1 :(得分:0)
这里的问题是,当屏幕首次加载时,嵌入的SWF文件没有焦点。您可以使用JavaScript为其指定焦点,但根据我的经验,由于浏览器解释JS的方式不同,这并不总是在100%的时间内起作用。很多人做的是在游戏加载后有一个很大的START按钮,这样玩家就必须点击SWF才能开始游戏。有些网站甚至使用JS来检测游戏何时失去焦点并暂停游戏并提醒用户。
我想我没有完全回答你的问题,因为我在JavaScript方面并不是那么出色,但我希望这能指出你正确的方向。
答案 2 :(得分:0)
回应你的评论...... 我不清楚什么。如果您必须单击以启动歌曲,那么您已经点击了SWF并且您应该获得键盘事件,对吧?因此,如果您必须单击以启动然后再次单击 ,则可能需要确保您的鼠标侦听器位于显示列表的根目录中。
// in your document class / main AS file...
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
或者您可能需要在EnterFrame循环期间轮询输入而不是侦听键事件。
答案 3 :(得分:0)
我知道你的意思。在键盘事件触发之前,舞台上有一个需要对焦的特定对象。我在游戏中遇到了同样的问题。精灵需要使用键盘箭头移动,但容器需要聚焦,因此它会响应。我只是将我要移动的对象设置为tabEnabled,因为我的要求仅用于辅助功能,因此首先对对象进行选项卡将为其提供键盘控制。