我正在建立一个Flash游戏,当用户选择他/她希望建造但后来改变主意的建筑物时,他/她可以按下键盘上的“ESC”以便建筑物未被选中 - 用户将不会一旦他/她选择建筑物就被迫建造。我尝试分配ESCAPE密钥但它不起作用。如果我将它分配给空格键,左键,右键等,它工作正常。但用户必须按这些键是没有意义的。 ESCAPE键应该是理想的。这是我的代码:
import flash.events.KeyboardEvent;
stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
function myKeyDown(e:KeyboardEvent):void {
if (e.keyCode==Keyboard.ESCAPE) {
trace(e.keyCode);
constructionButtonUnselected();
}
}
有人知道什么阻止系统识别ESCAPE密钥?
答案 0 :(得分:4)
当swf在浏览器中运行或独立运行时,转义键将起作用,但是当您在Flash CS4或Flash CS5中运行内容时,IDE将捕获转义键而不将其传递给播放器。 F#键和其他几个键也会发生同样的事情。
如果你想使用Escape键,你可以,但是当你在IDE中工作时,你需要定义另一个用作备份的键。
答案 1 :(得分:4)
实际上,当您在IDE中编译SWF时,转到Controls - >禁用键盘快捷键,这将允许您捕获Escape键的KeyboardEvent,而不是IDE过早地抓取它。
答案 2 :(得分:1)
我尝试过以下代码:
package{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Esc extends Sprite{
public function Esc(){
addEventListener( Event.ADDED_TO_STAGE, onStage );
}
private function onStage( e:Event ):void {
removeEventListener( e.type, onStage );
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDown );
}
private function keyDown( e:KeyboardEvent ):void {
out.text = String( e.keyCode );
out.text += ( "\n"+String( e.charCode ) );
if ( e.keyCode == Keyboard.ESCAPE ) {
out.text = "Escape!";
}
}
}
}
out是舞台上的文字区域。
我可以看到“逃脱!”
虽然我在flashCS4中编码,编译并尝试过,但FlashPlayer并未成为键盘焦点。在浏览器中打开swf后,它工作了,并在屏幕上给了我一个Escape。但我知道ESC-Key有一些限制,因为它是离开全屏模式的默认键,我认为如果你处于全屏模式,就无法获得这个特殊的键盘事件。也许如果在参数中启用“allowfullscreen”,则此事件不再受您控制。