Flash 键盘事件as3不工作
这件事让我头痛了两个小时才明白过来。Flash 键盘事件as3不工作,flash,actionscript-3,actionscript,flash-builder,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Builder,Flash Cs5,这件事让我头痛了两个小时才明白过来。 我决定把它贴在这里,以帮助别人不要把头发拔出来:) 基本上,错误在于我没有从FlashBuilder环境中接收到键盘事件(AdobeFlashCS5也存在相同的错误/问题)。我设置了舞台。焦点=舞台,没有帮助。我添加了其他事件监听器(鼠标按下,帧进入),效果很好,我添加了MovieClip儿童并收听关于这些儿童的事件,仍然是同一个问题 package { public class Test extends Sprite { public
我决定把它贴在这里,以帮助别人不要把头发拔出来:) 基本上,错误在于我没有从FlashBuilder环境中接收到键盘事件(AdobeFlashCS5也存在相同的错误/问题)。我设置了舞台。焦点=舞台,没有帮助。我添加了其他事件监听器(鼠标按下,帧进入),效果很好,我添加了MovieClip儿童并收听关于这些儿童的事件,仍然是同一个问题
package
{
public class Test extends Sprite
{
public function Test()
{
this.addEventListener(Event.ADDED_TO_STAGE,init);
}
public function init(stage:Stage):void
{
this.removeEventListener(Event.ADDED_TO_STAGE,init);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}
private function keyPressed(e:KeyboardEvent):void
{
trace("keyPressed");
}
private function keyReleased(e:KeyboardEvent):void
{
trace("keyReleased");
}
}
}
使用键盘命令需要监听键盘事件。此过程与AS3中监听任何其他事件的过程相同。您需要使用addEventListener()方法向键盘事件注册。但是,与其他对象不同,由于键盘不必附加到项目中的任何特定对象,因此键盘事件通常在阶段注册。在下面的代码中,stage对象注册了一个键盘事件,该事件将在每次按下键盘键时触发 与AS2不同,AS3中的键盘事件不是全局事件。它们被发布到舞台上,并在显示列表中以气泡的形式显示有焦点的任何显示对象。
package
{
import flash.display.*;
import flash.events.*;
public class Test extends Sprite
{
public function Test()
{
init();
}
public function init():void
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}
private function keyPressed(e:KeyboardEvent):void
{
trace("keyPressed");
}
private function keyReleased(e:KeyboardEvent):void
{
trace("keyReleased");
}
}
}
因此,不要使用stage:stage
而使用event:event
而u需要导入所需的类。标记了更改的行。顺便说一句,您的代码没有编译,请检查错误日志
package {
import flash.display.Sprite; /// changed line
import flash.events.Event; /// changed line
import flash.events.KeyboardEvent; /// changed line
public class Test extends Sprite
{
public function Test()
{
this.addEventListener(Event.ADDED_TO_STAGE,init);
/* i like it this way
stage ? init(null) : addEventListener(Event.ADDED_TO_STAGE,init);
*/
}
public function init(e:Event):void /// changed line
{
this.removeEventListener(Event.ADDED_TO_STAGE,init);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}
private function keyPressed(e:KeyboardEvent):void
{
trace("keyPressed");
}
private function keyReleased(e:KeyboardEvent):void
{
trace("keyReleased");
}
}
}
此代码是否正常工作?此代码不正常工作,正如上面所述。问题是为什么它不起作用。我终于弄明白了,把问题贴在这里让别人回答(或者我最终会自己回答)。根据线索,环境是导致错误的原因。
package {
import flash.display.Sprite; /// changed line
import flash.events.Event; /// changed line
import flash.events.KeyboardEvent; /// changed line
public class Test extends Sprite
{
public function Test()
{
this.addEventListener(Event.ADDED_TO_STAGE,init);
/* i like it this way
stage ? init(null) : addEventListener(Event.ADDED_TO_STAGE,init);
*/
}
public function init(e:Event):void /// changed line
{
this.removeEventListener(Event.ADDED_TO_STAGE,init);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
}
private function keyPressed(e:KeyboardEvent):void
{
trace("keyPressed");
}
private function keyReleased(e:KeyboardEvent):void
{
trace("keyReleased");
}
}
}