私はこのようなクラスを持っています:
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をクリックすると、ゲームを再開したいのですが。画面がコンストラクターでブール値を取得していることがわかるように、ゲームの制御にキーボードまたはマウスを使用していると判断します。マウスではうまく機能しますが、キーを使用すると、何も起こらないまで再起動ボタン(画面上にあります)をクリックする必要があります。クリックしてボタンを押すと、playScreenが表示されますが、キーリスナーが表示されます。なぜかまだ動作中です。いずれかのキーを押すと、ゲームが再開されます。
私のメインクラスのポイントは、プレイヤーが死亡した場合、彼はgameOverScreenを取得し、プレイスクリーンが閉じられ、gameOverScreenもリスナーを取得し、RESTARTと呼ばれるイベントをリッスンし、イベントがディスパッチされた場合、新しいplayScreenは作成され、ゲームオーバーは却下されました。
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();
}
理解できるといいのですが、そうでない場合は、きれいではないことに注意してください。ありがとう
アップデート
私のonAddToStage関数
public function onAddToStage(event: Event):void{
stage.focus = this;
this.addEventListener(KeyboardEvent.KEY_DOWN, onPushSpace);
}