ActionScript 3中的按键问题

时间:2009-11-11 19:02:48

标签: actionscript-3

我正在为作业创建类似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;
            }
        }
    }
    

4 个答案:

答案 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,因为我的要求仅用于辅助功能,因此首先对对象进行选项卡将为其提供键盘控制。