2017-01-20 12 views
0

Привет, Я пытаюсь сделать игру с гравитационным переворачиванием, как механик, похожий на старого героя тяжелой игры, но я не могу заставить его работать. пожалуйста, помогитеКак создать механизм гравитационного переворачивания (ActionScript 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 –