Events Can';t添加键盘事件侦听器操作脚本
我刚刚开始学习actionscript,为了帮助习惯语法,我正在挑战自己制作一个简单的游戏,在这个游戏中,你是一个能射出下落方块的圆圈 由于某些原因,每次我尝试添加键盘事件侦听器时,游戏都无法运行 这是我的播放器文件Events Can';t添加键盘事件侦听器操作脚本,events,actionscript,listener,Events,Actionscript,Listener,我刚刚开始学习actionscript,为了帮助习惯语法,我正在挑战自己制作一个简单的游戏,在这个游戏中,你是一个能射出下落方块的圆圈 由于某些原因,每次我尝试添加键盘事件侦听器时,游戏都无法运行 这是我的播放器文件 package { import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; public class P
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Player extends Sprite
{
//Variables
private var playerRadius:Number = 50;
private var playerX:Number = 5;
private var playerY:Number = 5;
private var speed:Number = 0;
private var xvel:Number = 0;
public function Player()
{
init();
//Drawing
drawPlayer();
//Event Listeners
this.addEventListener(Event.ENTER_FRAME, updatePlayer);
stage.addEventListener(KeyboardEvent.KEY_DOWN, controlPlayer);
}
//Update
public function updatePlayer(event:Event):void{
this.x ++;
}
//Draw
private function drawPlayer():void{
graphics.beginFill(0xFF0000);
graphics.drawCircle(10,10,50);
graphics.endFill();
}
//Control
public function controlPlayer(event:KeyboardEvent):void{
if (event.keyCode == Keyboard.RIGHT) {
speed = 5;
}
}
}
}
用这段代码我只会得到一个白色的屏幕,但是如果我注释掉
stage.addEventListener(KeyboardEvent.KEY_DOWN, controlPlayer);
这是可行的,但我无法控制玩家
我将感谢所有的帮助 使用您的代码,我能够找出您的问题,最终发现您的代码存在一些问题。我很惊讶您在测试应用程序时在Flash“输出”面板中没有看到以下错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at Player()
at Player_fla::MainTimeline/frame1()
Player
的对象时,它还没有添加到Stage,因此它还没有访问Stage
对象的权限Player
类需要知道它的一个实例已添加到stage中,以便它确切地知道何时应该注册键盘事件侦听器package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Player extends Sprite
{
//Variables
private var playerRadius:Number = 50;
private var playerX:Number = 5;
private var playerY:Number = 5;
private var speed:Number = 0;
private var xvel:Number = 0;
public function Player()
{
init();
//Drawing
drawPlayer();
//Event Listeners
this.addEventListener(Event.ENTER_FRAME, updatePlayer);
this.addEventListener(Event.ADDED_TO_STAGE, initKeyboardListener);
}
public function initKeyboardListener(event:Event) {
stage.addEventListener(KeyboardEvent.KEY_DOWN, controlPlayer);
}
//Update
public function updatePlayer(event:Event):void{
this.x++;
}
//Draw
private function drawPlayer():void{
graphics.beginFill(0xFF0000);
graphics.drawCircle(10,10,50);
graphics.endFill();
}
//Control
public function controlPlayer(event:KeyboardEvent):void {
if (event.keyCode == Keyboard.RIGHT) {
this.speed = 5;
}
}
} // end class
} // end package
要使所有这些都起作用,不要忘记将player对象添加到stage。我只能假设您这样做了,因为您没有共享任何代码来显示您在哪里使用Player
类,但下面是我所指的示例:
import Player;
var player:Player = new Player();
stage.addChild(player);
此外,键盘侦听器只需更改
速度
变量;但是,speed变量在代码中的其他任何地方都没有实现,因此在修复它之前,您不会在GUI中看到差异。我用跟踪语句验证了所有的侦听器都正常工作。非常感谢,这非常有帮助。很高兴它帮助了您。如果这是您正在寻找的答案,请将答案标记为已接受。干杯