2014-12-04 6 views
-1

전 초급자이고이 코드는 인터넷에서 어면 배우고 싶은 곳입니다 이것은 스네이크 게임입니다. 스페이스 바 키보드를 사용하여 게임을 일시 중지하고 싶습니다. 나는 그렇지 않습니다. 게임 사람이플래시 - 일시 중지 게임 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입니다. 키보드의 Space를 누르면 if 상태가 어떤 상태에 있는지 확인할 수 있습니다. 따라서 처음에는 _Pausedtrue으로 설정됩니다. 다시 스페이스를 누르면 false으로 다시 설정됩니다. 간단 하죠?

이제 모든 프레임에 대해 실행되는 update이라는 ENTER_FRAME에 대한 EventListener가 있습니다. 이 기능은 잘 작동한다는 것을 책임집니다. 화면에 물건을 그리거나 게임 로직을 처리하는 다른 기능을 호출하는 것을 볼 수 있습니다. 그러면이 함수를 호출하지 않으면 어떻게 될까요? 게임이 중단됩니다. 따라서 일시 정지 상태 일 때 해당 함수를 호출하지 않는 방법이 필요합니다. 다시 말하지만, 이것은 매우 간단합니다.

다음에 update(evt)의 내용을 변경

: 당신의 _Paused 변수가 false로 설정된 경우 이제 함수 만 호출됩니다

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

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

. 매우 기본적인 것들이지만, 이것이 당신의 공부에 도움이되기를 바랍니다. 어쩌면 작은 단계를 먼저 시도해야할까요? 프로그래밍 게임은 코딩에 대한 경험이 전혀없는 초보자에게는 꽤 복잡 할 수 있습니다.

관련 문제