2014-12-04 111 views
-1

我只是一個初學者,這個代碼在互聯網上的某個地方,我只是想學習 這是一個蛇遊戲,我想用空格鍵盤暫停遊戲 我沒有知道如何暫停一個人請幫助Flash - 暫停遊戲ActionScript 3

import flash.ui.*; 

    public class Snake extends MovieClip 
    { 

     private var _Paused:Boolean = false 
     private var score, life, framesElapsed:Number; 
     private var p1speedX, p1speedY:Number; 
     private var spacePressed, readyToMove, gotoWin, gotoLose:Boolean; 
     private var left,right,up,down:Boolean; 
     private var snakes:Array; 
     private var mcFood:Food; 

     public function Snake() 
     { 

     } 

     //All Start Functions 
     public function startMenu() 
     { 
      stop(); 
      btnStartGame.addEventListener(MouseEvent.CLICK, gotoStartGame); 
      btnHowToPlay.addEventListener(MouseEvent.CLICK, gotoHowToPlay); 
     } 

     public function startHowToPlay() 
     { 
      btnBack.addEventListener(MouseEvent.CLICK, gotoMenu); 
     } 

     public function startWin() 
     { 
      btnBack.addEventListener(MouseEvent.CLICK, gotoMenu); 
     } 

     public function startLose() 
     { 
      btnBack.addEventListener(MouseEvent.CLICK, gotoMenu); 
     } 

     public function startGame() 
     {   
      score = 0; 
      life = 3; 
      framesElapsed = 0; 
      p1speedX = 1; //snakek starts moving right 
      p1speedY = 0; 
      up = false; 
      down = false; 
      left = false; 
      right = false; 
      spacePressed = false; 
      readyToMove = false; 
      gotoWin = false; 
      gotoLose = false; 
      snakes = new Array(); 

      //Create 1st body part of snake and push it into the array 
      var snakeHead = new SnakePart(); 
      snakeHead.x = 400; 
      snakeHead.y = 300; 
      snakes.push(snakeHead); 
      addChild(snakeHead); 

      addEventListener(Event.ENTER_FRAME,update); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 
      stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler); 

      stage.focus = this; 
     } 

     //All Goto Functions 
     private function gotoStartGame(evt:MouseEvent) 
     { 
      btnStartGame.removeEventListener(MouseEvent.CLICK, gotoStartGame); 
      btnHowToPlay.removeEventListener(MouseEvent.CLICK, gotoHowToPlay); 
      gotoAndStop("game"); 
     } 

     private function gotoHowToPlay(evt:MouseEvent) 
     { 
      btnStartGame.removeEventListener(MouseEvent.CLICK, gotoStartGame); 
      btnHowToPlay.removeEventListener(MouseEvent.CLICK, gotoHowToPlay); 
      gotoAndStop("howtoplay"); 
     } 

     private function gotoMenu(evt:MouseEvent) 
     { 
      btnBack.removeEventListener(MouseEvent.CLICK, gotoMenu); 
      gotoAndStop("menu"); 
     } 

     private function keyDownHandler(evt:KeyboardEvent) 
     { 
      if (evt.keyCode == Keyboard.A) 
      { 
       //1st Player Left Key 
       left = true; 
      } 
      else if (evt.keyCode == Keyboard.D) 
      { 
       //1st Player Right Key 
       right = true; 
      } 

      if (evt.keyCode == Keyboard.W) 
      { 
       //1st Player Up Key 
       up = true; 
      } 
      else if (evt.keyCode == Keyboard.S) 
      { 
       //1st Player Down Key 
       down = true; 
      } 

      if (evt.keyCode == Keyboard.SPACE) 
      { 
       spacePressed = true; 

      }   



     } 

     private function keyUpHandler(evt:KeyboardEvent) 
     { 
      if (evt.keyCode == Keyboard.A) 
      { 
       left = false; 
      } 
      else if (evt.keyCode == Keyboard.D) 
      { 
       right = false; 
      } 
      else if (evt.keyCode == Keyboard.W) 
      { 
       up = false; 
      } 
      else if (evt.keyCode == Keyboard.S) 
      { 
       down = false; 
      } 

      if (evt.keyCode == Keyboard.SPACE) 
      { 
       spacePressed = false; 
      } 


     } 


     public function update(evt:Event) 
     { 
      handleUserInput(); 
      handleGameLogic(); 
      handleDraw(); 

      if (gotoWin) 
       triggerGoToWin(); 
      else if (gotoLose) 
       triggerGoToLose(); 
     } 

     private function handleUserInput() 
     { 
      //Handle player 1 position 

      //if player wants to move left but snake is not 
      //already moving right 
      if (left && (p1speedX != 1)) 
      { 
       p1speedX = -1; 
       p1speedY = 0; 
      } 
      //if player wants to move right but snake is not 
      //already moving left 
      else if (right && (p1speedX != -1)) 
      { 
       p1speedX = 1; 
       p1speedY = 0; 
      } 
      //if player wants to move up but snake is not 
      //already moving down 
      else if (up && (p1speedY != 1)) 
      { 
       p1speedY = -1; 
       p1speedX = 0; 
      } 
      else if (down && (p1speedY != -1)) 
      { 
       p1speedY = 1; 
       p1speedX = 0; 
      } 

      if (spacePressed) 
       readyToMove = true; 

     } 

     private function handleGameLogic() 
     { 
      if (!readyToMove) 
       return; 

      framesElapsed++; 

      //Update the new position of the snake's head 
      if (framesElapsed % 2 == 0) 
      { 
       //Update motion of the snake's body 
       for (var i = snakes.length - 1; i >= 1; i--) 
       { 
        snakes[i].x = snakes[i-1].x; 
        snakes[i].y = snakes[i-1].y; 
       } 

       if (p1speedX > 0) 
       { 
        snakes[0].x += 20; 
       } 
       else if (p1speedX < 0) 
       { 
        snakes[0].x -= 20; 
       } 
       else if (p1speedY > 0) 
       { 
        snakes[0].y += 20; 
       } 
       else if (p1speedY < 0) 
       { 
        snakes[0].y -= 20; 
       } 

       //Check for collisions between the snake and its own body 
       for (var i = snakes.length - 1; i >= 1; i--) 
       { 
        if ((snakes[0].x == snakes[i].x) && 
         (snakes[0].y == snakes[i].y)) 
        { 
         collided(); 
         break; 
        } 
       } 
      } 

      //Check for collisions between the snake and the walls 
      if (snakes[0].y < 0) 
      { 
       collided(); 
      } 
      else if (snakes[0].x > 800) 
      { 
       collided(); 
      } 
      else if (snakes[0].x < 0) 
      { 
       collided(); 
      } 
      else if (snakes[0].y > 600) 
      { 
       collided(); 
      } 

      //Add new food items 
      if (mcFood == null) 
      { 
       //Create a new food item 
       mcFood = new Food(); 
       mcFood.x = Math.random() * 700 + 50; 
       mcFood.y = Math.random() * 500 + 50; 
       addChild(mcFood); 
      } 

      //Check for collisions between food item and Snake 
      if (mcFood != null) 
      { 
       if (snakes[0].hitTestObject(mcFood)) 
       { 
        //Add score 
        score += 100; 
        if (score >= 5000) 
         gotoWin = true; 

        removeChild(mcFood); 
        mcFood = null; 

        //Add a body 
        var newPart = new SnakePart(); 
        newPart.x = snakes[snakes.length-1].x; 
        newPart.y = snakes[snakes.length-1].y; 
        snakes.push(newPart); 
        addChild(newPart); 
       } 
      } 
     } 

     private function handleDraw() 
     { 
      //Handle display 
      if (!readyToMove) 
       txtHitSpaceBar.visible = true; 
      else 
       txtHitSpaceBar.visible = false; 

      txtScoreP1.text = String(score); 
      txtLife.text = String(life); 
     } 

     private function triggerGoToWin() 
     { 
      clearGame(); 
      removeEventListener(Event.ENTER_FRAME, update); 
      gotoAndStop("win"); 
     } 

     private function triggerGoToLose() 
     { 
      clearGame(); 
      removeEventListener(Event.ENTER_FRAME, update); 
      gotoAndStop("lose"); 
     } 

     //Misc Functions 
     private function resetGame() 
     { 
      //remove all food 
      removeChild(mcFood); 
      mcFood = null; 

      //remove all of snake body except first 
      for (var i = snakes.length - 1; i >= 1; i--) 
      { 
       removeChild(snakes[i]); 
       snakes.splice(i,1); 
      } 

      //Center the snake's head 
      snakes[0].x = 400; 
      snakes[0].y = 300; 

      readyToMove = false; 
     } 

     private function clearGame() 
     { 
      //remove all food 
      if (mcFood != null) 
      { 
       removeChild(mcFood); 
       mcFood = null; 
      } 

      //remove all of snake body 
      for (var i = snakes.length - 1; i >= 0; i--) 
      { 
       removeChild(snakes[i]); 
       snakes.splice(i,1); 
      } 
     } 

     private function collided() 
     { 
      life -= 1; 

      if (life > 0) 
       resetGame(); 
      else 
       gotoLose = true; 
     } 




      } 

    }//end class  
//end package 

回答

0

有幾種可能性,如何暫停遊戲。

您已經有一個名爲_Paused的布爾變量,這將幫助我們確定何時暫停執行遊戲。

變化keyDownHandler(evt)以下內容:

private function keyDownHandler(evt:KeyboardEvent) 
    { 
     ... 
     //leave the if conditionals for movement as they are 
     if (evt.keyCode == Keyboard.SPACE) 
     { 
      if(_Pause == true){ 
       _Pause = false; 
      }else{ 
       _Pause = true; 
      } 
     }   
    } 

上面的代碼將暫停的狀態和遊戲狀態之間切換。當遊戲第一次啓動時,_Paused變量是false。一旦按下鍵盤上的空格,if條件將檢查您需要進入的狀態。因此,在第一次,_Paused將被設置爲true。如果再次按空格鍵,它會再次將其設置爲false。很簡單,對吧?

現在,您有一個針對ENTER_FRAME的EventListener,稱爲update,它針對每個幀執行。這個功能是負責任的,好吧,工作。你可以看到它調用了在屏幕上繪製東西或處理遊戲邏輯的不同功能。那麼,如果你不調用這個函數會發生什麼?遊戲將停止。所以我們需要一種方法,當你處於暫停狀態時不要調用這些函數。再次,這很簡單。

update(evt)內容更改爲以下:

public function update(evt:Event) 
    { 
     if(_Paused == false){ 
      handleUserInput(); 
      handleGameLogic(); 
      handleDraw(); 

      if (gotoWin) 
       triggerGoToWin(); 
      else if (gotoLose) 
       triggerGoToLose(); 
     } 
    } 

現在,當你_Paused變量設置爲false的功能纔會被調用。 我希望這有助於你的學習,儘管這是非常基本的東西。也許你應該先嚐試更小的步驟?對於沒有任何編碼經驗的初學者來說,編程遊戲可能相當複雜。