如何将键盘导航添加到基于Flash AS3的应用程序?

时间:2014-03-26 14:13:58

标签: actionscript-3 navigation keyboard

我想通过键盘导航更方便地使用基于Flash AS3的应用程序。 添加到每个MovieClip的最佳方法是MouseEvent.CLICK能够通过TAB点击/解雇通过ENTER来选择?

我的代码的一些基本示例:

nav.btna.addEventListener(MouseEvent.CLICK, openSection);
dialog.btnx.addEventListener(MouseEvent.CLICK, closeDialog);

function openSection(event:Event=null):void
{
    trace("nav.btna")
}

function closeDialog(event:Event=null):void
{
    trace("dialog.btnx")
}

我记得有一个AS3函数,如果使用TAB选择了MovieClip,则启用带有MouseEvent的每个MovieClip都可以通过ENTER激活。我不能记住这个功能。

1 个答案:

答案 0 :(得分:1)

我认为问题可能是您使用MovieClip而不是按钮(ButtonSimpleButton)尝试此操作。

我通过在我的库中创建按钮而不是MovieClip进行了一个简单的测试,这按预期工作:

// I have 4 buttons (button1, button2, etc) on the stage
for(var i:int = 1; i <= 4; i++)
{
    var mc = getChildByName("button" + (i+1));
    mc.tabIndex = i;
    mc.addEventListener(MouseEvent.CLICK, onClicked);
}

function onClicked(e:MouseEvent):void 
{
    trace(e.currentTarget + " clicked");
}

stage.focus = stage;

我最初使用MovieClip个实例运行此测试,虽然他们会显示标签正常工作(黄色边框显示),但MouseEvent.CLICK从未触发过。一旦我切换到实际按钮(在这种情况下为SimpleButton),它就可以使用Enter键和Space键。

修改

要回答评论中提出的问题,这是一种快速而肮脏的方式来转换&#34; MovieClips到运行时的SimpleButtons:

// I have 4 MovieClips (button1, button2, etc) on the stage
for(var i:int = 1; i <= 4; i++)
{
    var mc:MovieClip = getChildByName("button" + i) as MovieClip;
    var button:SimpleButton = convertMovieClipToButton(mc);
    button.tabIndex = i;
    button.addEventListener(MouseEvent.CLICK, onClicked);
}

function convertMovieClipToButton(mc:MovieClip):SimpleButton
{
    var className:Class = getDefinitionByName(getQualifiedClassName(mc)) as Class;
    var button:SimpleButton = new SimpleButton(new className(), new className(), new className(), new className());
    button.name = mc.name;
    button.x = mc.x;
    button.y = mc.y;
    mc.parent.addChildAt(button, getChildIndex(mc));
    mc.parent.removeChild(mc);
    return button;
}