2012-03-20 2 views
-1

У меня есть программа игры с памятью, и когда таймер заканчивается, я хочу, чтобы он перешел в кадр 3, где отображается страница с ошибкой игры.проблемы с gotoandstop actionscript 3

У меня есть все настройки, за исключением случаев, когда игра заканчивается из-за времени, кадр просто перекрывает исходный кадр, а не переходит на совершенно отдельную страницу.

Может ли кто-нибудь мне помочь?

Вот мой код:

package { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.events.TimerEvent; 
import flash.utils.Timer; 
import flash.display.MovieClip; 
import flash.text.TextField; 

public class MemoryGame extends MovieClip{ 

    private var firstTile:cards; 
    private var secondTile:cards; 
    private var pauseTimer:Timer; 
    private var score:int; 
    private var cardCount:int; 
    var seconds:Number; 
    var minutes:Number; 


    var numberDeck:Array = new Array(1,1,2,2,3,3,4,4,5,5,6,6); 


    public function MemoryGame(){ 

     //TIMER FUNCTION 
     var levelTimer:Timer = new Timer(1000, 180); 
     levelTimer.addEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); 
     levelTimer.addEventListener(TimerEvent.TIMER, timerHandler); 

     // LEVEL FUNCTION 
     easyBtn.addEventListener(MouseEvent.CLICK, easyButtonClicked); 
     medBtn.addEventListener(MouseEvent.CLICK, medButtonClicked); 
     hardBtn.addEventListener(MouseEvent.CLICK, hardButtonClicked); 

     score = 0; 
     txtScore.text=""+score; 

     //Level button events 
     function easyButtonClicked(e:MouseEvent):void{ 
      removeChild(levelText); 
      trace("easy button clicked!"); 
      seconds = 0; 
      minutes = 1; 
      txtTime.text = "1:00"; 
      levelTimer.start(); 
      setupTiles(); 
     } 

     function medButtonClicked(e:MouseEvent):void{ 
      removeChild(levelText); 
      trace("medium button clicked!"); 
      seconds = 30; 
      minutes = 0; 
      txtTime.text = "0:30"; 
      levelTimer.start(); 
      setupTiles(); 
     } 

     function hardButtonClicked(e:MouseEvent):void{ 
      removeChild(levelText); 
      trace("hard button clicked!"); 
      seconds = 15; 
      minutes = 0; 
      txtTime.text = "0:15"; 
      levelTimer.start(); 
      setupTiles(); 
     } 


     //Timer handlers 
     function timerHandler(e:TimerEvent):void { 
      if (seconds > 00) { 
      seconds -=1; 
      } 

      else { 
       if (minutes > 0) {minutes -=1;seconds = 59;} 
     } 
       txtTime.text = minutes+":"+(seconds >= 10 ? seconds : "0"+seconds); 
      } 

     function timerCompleteHandler(e:TimerEvent):void { 
      e.target.reset(); 
      e.target.stop(); 
      trace("game over!"); 
     } 



     //Tiles set up 
     function setupTiles(){ 
     for(x=1; x<=4; x++) { 
      for (y=1; y<=3; y++){ 
       var randomCard = Math.floor(Math.random()*numberDeck.length); 
       var tile:cards = new cards(); 
       tile.card = numberDeck[randomCard]; 
       numberDeck.splice(randomCard,1); 
       tile.gotoAndStop(9); 
       tile.x = (x-1) * 150; 
       tile.y = (y-1) * 200; 
       tile.addEventListener(MouseEvent.CLICK,tileClicked); 
       addChild(tile); 
       cardCount = cardCount + 1 
      } 
     } 
    } 
    } 




    public function tileClicked(event:MouseEvent) { 
     var clicked:cards = (event.currentTarget as cards); 
     if (firstTile == null){ 
      firstTile = clicked; 
      firstTile.gotoAndStop(clicked.card); 
     } 
     else if (secondTile == null && firstTile != clicked){ 
      secondTile = clicked; 
      secondTile.gotoAndStop(clicked.card); 
      if (firstTile.card == secondTile.card){ 
       pauseTimer = new Timer(1000, 1); 
       pauseTimer.addEventListener(TimerEvent.TIMER_COMPLETE,removeCards); 
       pauseTimer.start(); 

      } 
      else { 
       pauseTimer = new Timer(1000, 1); 
       pauseTimer.addEventListener(TimerEvent.TIMER_COMPLETE,resetCards); 
       pauseTimer.start(); 
      } 
     } 

     if (seconds == 0){ 
      this.gotoAndStop(2); 
      pauseTimer.stop(); 
      //levelTimer.stop(); 
     } 
    } 


    public function resetCards(event:TimerEvent) { 
     firstTile.gotoAndStop(9); 
     secondTile.gotoAndStop(9); 
     firstTile = null; 
     secondTile = null; 
     pauseTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,resetCards); 
     score = score - 2; 
     txtScore.text=""+score; 
    } 


    public function removeCards(event:TimerEvent){ 
     removeChild(firstTile); 
     removeChild(secondTile); 
     firstTile = null; 
     secondTile = null; 
     pauseTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,removeCards); 
     score = score + 10; 
     txtScore.text=""+score; 
     cardCount = cardCount - 2; 
     trace("Cardcount: " + cardCount); 

     if (cardCount == 0){ 
      this.gotoAndStop(2); 
      txtFinalScore.text=" "+score; 
      pauseTimer.stop();   
      } 
       } 
} 
} 

Спасибо так много!

ответ

0

Когда вы добавляете объект с помощью addChild (object), он не связан с ключевыми кадрами вдоль временной шкалы.

Так что вам нужно сделать, а не прыгать в кадр 2, removeChild (object) или object.visible = false все дети, которых вы не хотите, и addChild (объект) ваши активы «вне времени».

Хорошая трудовая этика заключается в создании функций destroy(), которые удаляют и обнуляют любые нежелательные активы. Таким образом вы можете легко удалить ненужные элементы и освободить память.

+0

Хорошо, это работает! Теперь, как бы я начал перезагружать игру, когда я нажимаю кнопку «повтор»? Просто добавьте всех детей и верните рамку? – DommyCastles

+0

Я бы предложил попробовать забыть о прыжках в рамки. Попробуйте установить код с функциями, которые выполняют определенные задачи, например. настроить новую игру, закончить игру, начать следующий уровень и т. д. – crooksy88

Смежные вопросы