2012-03-29 96 views
0

我在這裏有一個記憶遊戲,當遊戲結束或計時器用完時,用戶被帶到一個頁面上的遊戲,其中包含一個重置按鈕。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(); 

    } 



    //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-0.5) * 150; 
      tile.y = (y-0.5) * 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){ 
     pauseTimer.stop(); 
     this.gotoAndStop(3); 


    } 
} 


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();   
     } 
      } 
} 
} 

這裏是我的復位按鈕代碼:

button_3.addEventListener(MouseEvent.CLICK, resetGame); 

function resetGame(event:MouseEvent):void 
{ 
score = 0; 
seconds = 0; 
pauseTimer.stop(); 

this.gotoAndStop(1); 

} 
+0

什麼是奇怪的事情,你得到的錯誤是什麼?嘗試更具體些。 (也許添加一些截圖?) – 2012-03-29 08:37:54

回答

0

確保您刪除所有事件偵聽器在你的復位方法之前this.gotoAndStop( );

button_3.addEventListener(MouseEvent.CLICK, resetGame); 

function resetGame(event:MouseEvent):void 
{ 
score = 0; 
seconds = 0; 
pauseTimer.stop(); 

levelTimer.removeEventListener(TimerEvent.TIMER_COMPLETE, timerCompleteHandler); 
levelTimer.removeEventListener(TimerEvent.TIMER, timerHandler); 

this.gotoAndStop(1); 

} 

這只是一個例子。你應該刪除所有的事件監聽器,因爲this.gotoAndStop(1);只會添加更多的偵聽器,而不會刪除前一幀中的偵聽器。這就是爲什麼一切都會變得不合時宜。

+0

我試圖做你的方式Captain-Rayne Martin,我試圖停止levelTimer,但它出現錯誤「訪問未定義的屬性levelTimer」,「訪問未定義的屬性TimerCompleteHandler」和「訪問未定義的屬性timerHandler」 – DommyCastles 2012-03-30 00:30:11

+0

另外,我該如何去重置整個遊戲? – DommyCastles 2012-03-30 00:36:24