是否可以将swf放入另一个swf中以更改键盘功能

时间:2013-04-12 00:20:08

标签: actionscript-3 flash flex actionscript flash-builder

我有一个swf文件使用adobe alchemy制作的库运行某种模拟器。这个swf运行游戏,我们可以使用键盘控制它们,我没有选项重新映射键盘中的按钮,所以我问是否可以将此swf放在另一个包含界面的swf中以重新映射按钮键盘?如果它可能会影响模拟器的性能。 你能给我一个如何做这些事情的例子。

1 个答案:

答案 0 :(得分:1)

我唯一想到的就是这样,它会捕获一个标准的KeyboardEvent,然后发送一个新的KeyboardEvent并重新映射keyCode

目前唯一的问题是每个媒体都会发送两个KeyboardEvents。第一个是原始版本,后者将是重新映射版本。

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);

function keyHandler(e:KeyboardEvent):void
{
    if(!e.cancelable)
    {
        var map:Object = {
            65: 20,
            66: 13
        };

        // Set up you own event.
        // The new KeyboardEvent is cancelable, so we can track it as such.
        var kbd:KeyboardEvent = new KeyboardEvent(e.type, true, true);
        kbd.keyCode = e.keyCode;

        for(var i:String in map)
        {
            // Set the keyCode of the new KeyboardEvent to the mapped value
            // as defined above.
            if(e.keyCode === int(i)) kbd.keyCode = map[i];
        }

        stage.dispatchEvent(kbd);
    }


    // Notice that you will be notified twice of a KeyboardEvent; once for
    // the original and once for the new one with the remapped (if applicable)
    // keyCode value.
    trace(e.keyCode);
}