У меня проблема с моими кнопками, которые работают только один раз. Кнопка запускает пользовательское событие. Пользовательское событие срабатывает, и слушатель на моем DocumentClass выбирает его в первый раз, но не отвечает в любое время после этого.Кнопки работают только один раз
реплицировать Click Here, затем нажмите кнопку «Начать игру», а затем кнопку меню в правом верхнем углу нажмите кнопку главного меню, а затем нажмите кнопку «Начать игру», а затем кнопку меню в правом верхнем углу, обратите внимание на то, вы не можете снова нажать главное меню , Это моя проблема. Он должен продолжать работать.
DocumentClass добавляет дочерний openScreen. openScreen запускает событие для DocumentClass для добавления дочернего playScreen и удаления openScreen. playcreen добавляет дочернее меню экрана при нажатии кнопки меню на экране воспроизведения. ** Когда нажата кнопка главного меню, она вызывает событие, которое прослушивается DocumentClass. Функция, которая запускается, удаляет экран playScreen и добавляет открытый экран. Эта серия событий работает только один раз, прежде чем подвешивать, когда ** шаг.
класса Document
public class DocumentClass extends MovieClip
{
public var playScreen:PlayScreen = new PlayScreen();
public var openScreen:OpenScreen = new OpenScreen();
public var started:Boolean = false;
public function DocumentClass()
{
openScreen.addEventListener(GameEvent.STAR, OnPlayClick);
playScreen.addEventListener(GameEvent.NG, NewGame);
playScreen.menuScreen.addEventListener(GameEvent.NG, NewGame, true, 0, true);
playScreen.menuScreen.addEventListener(GameEvent.MM, onMain);
addChild(openScreen)
}
public function OnPlayClick(gameEvent:GameEvent):void{
trace("start")
addChildAt(playScreen,0)
var tweenX:Tween = new Tween(openScreen, "x", None.easeIn, 0, -480, .5, true);
tweenX.addEventListener(TweenEvent.MOTION_FINISH, onTweenDone);
}
public function NewGame(gameEvent:GameEvent):void{
removeChild(playScreen)
playScreen = new PlayScreen();
addChild(playScreen)
playScreen.begin()
}
public function onMain(gameEvent:GameEvent):void{
playScreen.removeChild(playScreen.menuScreen)
this.removeChild(playScreen)
//openScreen = new OpenScreen();
openScreen.x = 0
addChild(openScreen)
playScreen = new PlayScreen();
MenuScreen общественного класса MenuScreen расширяет MovieClip {
public function MenuScreen()
{
backButton.buttonMode = true
backButton.addEventListener(MouseEvent.CLICK, OnBackClick);
exitButton.buttonMode = true
exitButton.addEventListener(MouseEvent.CLICK, OnExitClick);
restartButton.buttonMode = true
restartButton.addEventListener(MouseEvent.CLICK, OnRestartClick);
mainButton.buttonMode = true
mainButton.addEventListener(MouseEvent.CLICK, OnMainClick);
//NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN, onSystemKey);
backButton.AnswerText.text = "Return to Game"
restartButton.AnswerText.text = "Restart"
mainButton.AnswerText.text = "Main Menu"
exitButton.AnswerText.text = "Exit"
}
public function OnBackClick(myEvent:MouseEvent):void{
this.dispatchEvent(new GameEvent(GameEvent.BAC))
}
public function OnExitClick(myEvent:MouseEvent):void{
//NativeApplication.nativeApplication.exit();
}
public function OnRestartClick(myEvent:MouseEvent):void{
this.dispatchEvent(new GameEvent(GameEvent.NG))
trace("restrt click")
}
public function OnMainClick(myEvent:MouseEvent):void{
this.dispatchEvent(new GameEvent(GameEvent.MM))
trace("main click")
}
protected function onSystemKey(e:KeyboardEvent):void
{
if(e.keyCode == Keyboard.BACK)
{
e.preventDefault();
this.dispatchEvent(new GameEvent(GameEvent.BAC))
}
else if(e.keyCode == Keyboard.HOME)
{
//handle the button press here.
}
else if(e.keyCode == Keyboard.MENU)
{
//handle the button press here.
}
}
}
OpenScreen
public class OpenScreen extends MovieClip
{
public var hs:String
public function OpenScreen()
{
startButton.buttonMode = true
startButton.addEventListener(MouseEvent.CLICK, OnStartClick);
exitButton.buttonMode = true
exitButton.addEventListener(MouseEvent.CLICK, OnExitClick);
//NativeApplication.nativeApplication.addEventListener(KeyboardEvent.KEY_DOWN, onSystemKey);
readObject()
highScoreText.text = String(hs)
trace(highScoreText.text)
startButton.AnswerText.text = "Start"
//restartButton.AnswerText.text = "Restart"
//mainButton.AnswerText.text = "Main Menu"
exitButton.AnswerText.text = "Exit"
}
public function OnStartClick(myEvent:MouseEvent):void{
trace(this.hasEventListener(GameEvent.STAR))
this.dispatchEvent(new GameEvent(GameEvent.STAR))
}
public function OnExitClick(myEvent:MouseEvent):void{
//NativeApplication.nativeApplication.exit();
}
protected function onSystemKey(e:KeyboardEvent):void
{
if(e.keyCode == Keyboard.BACK)
{
//NativeApplication.nativeApplication.exit();
}
else if(e.keyCode == Keyboard.HOME)
{
//handle the button press here.
}
else if(e.keyCode == Keyboard.MENU)
{
}
}
Это имеет смысл, что это проблема, и это исправляет мою проблему с кнопками, которые не работают. Новый playScreen был моим способом создания новой игры, поскольку вся игровая механика заключена в playScreen. Есть ли лучший способ сбросить этот ребенок до того, как он был вызван? – Jimbo145
Возможно, это более эффективный способ, но это будет зависеть от вашего приложения в целом. Нет ничего плохого в очистке и повторной инстанцировании, если она достаточно эффективна - просто убедитесь, что в памяти нет предыдущего сохранения экрана (например, прослушиватели событий) – BadFeelingAboutThis