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