我有这样一个类:
public class GameOverScreen extends MovieClip {
public function GameOverScreen(useMouseControl:Boolean) {
if(useMouseControl){
Mouse.show();
restartButton.addEventListener(MouseEvent.CLICK, onClickRestart);
}
else{
this.addEventListener(KeyboardEvent.KEY_DOWN, onPushSpace);
}
}
public function onClickRestart(mouseEvent:MouseEvent):void{
dispatchEvent(new NavigationEvent(NavigationEvent.RESTART));
}
public function onPushSpace(keyboardEvent:KeyboardEvent):void{
trace(keyboardEvent);
dispatchEvent(new NavigationEvent(NavigationEvent.RESTART));
}...
这是一个游戏的结束画面。 (惊喜!)我想它重新启动我的比赛,如果我按下空格键,或点击restartButton在屏幕上。 正如你可以看到屏幕在构造函数中获取一个布尔值,至极决定我们使用键盘或鼠标来控制比赛。 它与鼠标工作得很好,但关键,我必须点击重启按钮 (至极是在屏幕上),直到它什么都不做,然后点击它之后,我按下一个按钮,我得到的播放屏幕,但我的KeyListener是somewhy还在工作,如果我按任意键,将重新启动游戏。
我的主类的观点是:如果玩家死亡,他获得了gameOverScreen和播放屏幕将被解雇,在gameOverScreen也得到监听器,它侦听称为RESTART事件,如果事件被分派,一个新的播放屏幕是创建的,而游戏结束驳回。
public class Avoider extends MovieClip { ....
public function onAvatarDeath(avatarEvent:AvatarEvent):void {
var finalScore:Number = playScreen.getFinalScore();
var finalTime:Number = playScreen.getFinalTime();
gameOverScreen = new GameOverScreen(useMouseControl);
gameOverScreen.addEventListener(NavigationEvent.RESTART, onRequestRestart);
gameOverScreen.setFinalScore(finalScore);
gameOverScreen.setFinalTime(finalTime);
addChild(gameOverScreen);
playScreen = null;
}
public function restartGame():void {
playScreen = new PlayScreen(useMouseControl);
playScreen.addEventListener(AvatarEvent.DEAD, onAvatarDeath);
addChild(playScreen);
gameOverScreen = null;
}
public function onRequestRestart(navigationEvent:NavigationEvent):void {
restartGame();
}
我希望这是可以理解的,如果不是请注意它是什么不干净。 谢谢
UPDATE
我onAddToStage功能
public function onAddToStage(event: Event):void{
stage.focus = this;
this.addEventListener(KeyboardEvent.KEY_DOWN, onPushSpace);
}