2017-01-20 8 views
0

안녕하세요 저는 오래된 미니 클립 게임 중력 녀석과 같은 정비공으로 뒤집는 중력을 지닌 게임을 만들려고 노력하고 있지만 작동하지 않는 것 같습니다. 제발 도와주세요중력을 뒤집는 정비공 (액션 스크립트 3)을 만들려면 어떻게해야합니까?

이것은 내 머리 속에있는 이론입니다. 나는 영화 클립을 가지고 있으며, 항상 떨어지고있다./this.y + dy. 그러나 플랫폼과 충돌하면 dy가 0으로 설정되어 넘어지지 않습니다. 그런 다음 스페이스 바를 누르면 dy가 다시 3으로 설정되지만 -1로 곱 해져 위쪽으로 날기 시작합니다.

이 내가 지금까지

package { 
import flash.display.*; 
import flash.events.*; 
import flash.ui.Keyboard; 

public class Player extends MovieClip{ 
    //Properties 
    private var moveLeft:Boolean; 
    private var moveRight:Boolean; 
    private var gravity:Boolean; //Switches gravity 
    private var dx:Number //Speed of player moving on X axis 
    private var dy:Number //Speed of player moving on Y axis 
    private var level:MovieClip; 
    private var platforms:Array; 
    private var tilesTop:Array; 
    private var tilesBtm:Array; 
    private var tilesLeft:Array; 
    private var tilesRight:Array; 
    private var grounded:Boolean; 
    private var flipGravity:Number; 

    //Constructor 
    public function Player(iMain:Main) { 
     level = iMain.getLevel(); 
     platforms = level.getPlatforms(); 
     tilesTop = level.getTilesTop(); 
     tilesBtm = level.getTilesBtm(); 
     tilesLeft = level.getTilesLeft(); 
     tilesRight = level.getTilesRight(); 

     dx = 10; 
     dy = 10; 
     flipGravity = -1; 
     this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
    } 

    //Methods 
    // Method: Add to stage handler 
    private function addedToStageHandler(evt:Event):void { 
     this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
     this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler); 
    } 

    //Methods: Key down handler 
    private function keyDownHandler(evt:KeyboardEvent):void { 
     if (evt.keyCode == Keyboard.LEFT) { 
      moveLeft = true; 
     } 
     else if (evt.keyCode == Keyboard.RIGHT) { 
      moveRight = true; 
     } 
     else if (evt.keyCode == Keyboard.SPACE) { 
      if (gravity) { 
       gravity = false; 
      } 
      else if (!gravity) { 
       gravity = true; 
      } 
     } 
    } 

    //Methods: Key up handler 
    private function keyUpHandler(evt:KeyboardEvent):void { 
     if (evt.keyCode == Keyboard.LEFT) { 
      moveLeft = false; 
     } 
     else if (evt.keyCode == Keyboard.RIGHT) { 
      moveRight = false; 
     } 
    } 

    //Methods: Move player 
    public function movePlayer() { 

     // Move downward 
     this.y += dy; 

     grounded = false; 

     // *** Player's collision tests 
     // Check if it lands on platform 
     landOnPlatform(); 

     // Move left 
     if (moveLeft) { // equivalent to if (moveLeft == true) 
      if (this.x > 200) { //move player 
       this.x -= dx; 
      } 
      else { 
       level.moveLevel(dx); 
       if (level.x >= 0) {//stage stop moving so that the player won't fall of the screen(left) 
        level.x = 0; 
        this.x -= dx; 
        if (this.x < this.width/2) { 
         this.x=this.width/2; 
        } 
       } 
      } 
     } 

     // Move right 
     if (moveRight) { 
      if (this.x < 600) { //move player 
       this.x += dx; 
      } 
      else { 
       level.moveLevel(-dx); 
       if (level.x <= -1600) { //stage stop moving so that the player won't fall of the screen(right) 
        level.x = -1600; 
        this.x += dx; 
        if (this.x > stage.stageWidth - this.width/2) { 
         this.x= stage.stageWidth - this.width/2; 
        } 
       } 
      } 
     } 

     //Gravity flip 
     if (!gravity) { 
      dy *= flipGravity; 
      grounded = false; 
     } 
    } 

    private function landOnPlatform() { 
     for (var i:int=0;i<platforms.length;i++) { 
      /*if (this.hitTestObject(platforms[i])) { 
       dy = 0; 
       grounded = true; 
       this.y = platforms[i].y; 
       break; 
      }*/ 
      if (this.hitTestObject(tilesTop[i])) { 
       dy = 0; 
       grounded = true; 
       this.y = tilesTop[i].y; 
       break; 
      } 

      else if (this.hitTestObject(tilesBtm[i])) { 
       dy = 0; 
       grounded = true; 
       this.y = tilesBtm[i].y; 
       break; 
      } 

      else if (this.hitTestObject(tilesLeft[i])) { 
       dy = 0; 
       grounded = true; 
       this.x = tilesLeft[i].x; 
       break; 
      } 

      else if (this.hitTestObject(tilesRight[i])) { 
       dy = 0; 
       grounded = true; 
       this.x = tilesRight[i].x; 
       break; 
      } 
     } 
    } 
} 
} 

이 나는 ​​gameloop는 메인 클래스에서 실행하고이 이동 플레이어의 함수를 호출해야

위의 플레이어 클래스가 것입니다.

중력이 거짓 인 경우 플레이어가 부 풀리게되고 중력이 참이면 플레이어가 드롭 다운됩니다. 나는 dy가 -1로 곱 해졌을 때의 코드를 썼지 만, 스페이스를 눌러도 아무 일도 일어나지 않을 것입니다.

이것은 내가 가진 모든 파일입니다. Link

+0

어딘가에 질문이 있습니까? – jacksonecac

+0

@jacksonecac 나는 미안한 질문을 편집했다. 질문은 어떻게 중력 녀석이라고 불리는 오래된 게임처럼 게임에서 중력을 뒤집는 중력을 만들 수 있습니까? –

+0

@ Jerrybibo 질문을 편집하십시오. –

답변

1

당신은

dy * flipGravity; 

dy *= flipGravity; 

단순 오타를 변경해야합니까? 아니면 내가 더 설명해야합니까? 아마 당신이 다른 곳에서 += 운영자를 사용하고 있다는 것을 알기 쉽게 간단한 오타가있을 것입니다. 이것은 곱셈과 똑같습니다.

+0

고마워요. 그것은 어떤 것을 도왔습니다. 그러나 역 중력적 인 일은 여전히 ​​나 자신이 잘못하고있는 것을 알지 못합니다. –

+0

@ 스페이스 바를 누르면 @GabrielChan이 발생하지 않습니까? –

+0

Nvm 나는 그것을 스스로 해결했다. 그 단순한 멍청한 실수 @NealDavis –