Установить максимальную и текущую скорость автомобиля в Phaser

Я делаю гоночную игру с видом сверху, используя структуру Phaser, которая использует JS. У меня возникли проблемы с тем, чтобы заставить машину замедлиться, в данный момент она просто останавливается, когда ни одна кнопка не нажата. Я хочу, чтобы он замедлился, чтобы остановился. Вот мой код: create: function () {

    //run in canvas mode
    this.game.renderer.clearBeforeRender - false;
    this.game.renderer.roundPixels = true;

    //Add arcade physics
    this.game.physics.startSystem(Phaser.Physics.ARCADE);

    //Add background sprites
    this.game.add.sprite(0, 0, 'background');
    this.game.add.sprite(0, 0, 'track');

    //Add car sprite
    car = this.game.add.sprite(800, 135, 'car-concept');

    //Car physics settings
    this.game.physics.enable(car, Phaser.Physics.ARCADE);

    car.body.drag.set(100);
    car.body.maxVelocity.set(200);
    car.body.maxAngular = 500;
    car.body.angularDrag = 500;
    car.body.collideWorldBounds = true;

    //Game input
    cursors = this.game.input.keyboard.createCursorKeys();
    this.game.input.keyboard.addKeyCapture([ Phaser.Keyboard.SPACEBAR]);

    //pivot point
    car.pivot.x = car.width * .3;
    car.pivot.y = car.height * .5;
    car.anchor.setTo(0.3, 0.5);

    //scale the car
    car.scale.setTo(0.3, 0.3);
},

update: function () {

    car.body.velocity.x = 0;
    car.body.velocity.y = 0;
    car.body.angularVelocity = 0;

    if(cursors.left.isDown)
    {
      car.body.angularVelocity = -200;
    }
    else if(cursors.right.isDown)
    {
      car.body.angularVelocity = 200;
    }
    if(cursors.up.isDown)
    {
      this.game.physics.arcade.velocityFromAngle(car.angle, -200, car.body.velocity)
      if(this.currentSpeed < this.maxSpeed)
      {
        this.currentSpeed += 10;
      }
    }
    else
    {
      if(this.currentSpeed > 0)
      {
        this.currentSpeed -= 10;
      }
    }
    if(cursors.down.isDown)
    {
      this.game.physics.arcade.velocityFromAngle(car.angle, 200, car.body.velocity)
      if(this.currentSpeed > 0)
      {
        this.currentSpeed -= 30;
      }
    }

},

speed: function()
{
  this.maxSpeed = 100;
  this.currentSpeed = 0;
},

Я просмотрел здесь несколько вопросов об одной и той же проблеме, и вот как я добрался до того места, где я сейчас нахожусь. Я установил maxSpeed ​​и currentSpeed, но по какой-то причине это не позволит мне их использовать. Консоль в браузере не выдает никаких ошибок, поэтому, если кто-нибудь может помочь мне в этом, это было бы здорово!

Спасибо.


person Nathan Janman    schedule 24.02.2015    source источник


Ответы (2)


Причина, по которой он останавливается, заключается в том, что вы перемещаете его со скоростью, а не с ускорением, и устанавливаете скорость на ноль в своем цикле обновления (это фактически говорит «стоп, сейчас!»).

Удалите эти строки, и в вашем вызове velocityFromAngle вы должны передать это в body.acceleration вместо body.velocity.

Вот цикл обновления, который вы можете использовать, хотя вам нужно будет смешать свои настройки currentSpeed и тому подобное:

function update() {

    if (cursors.up.isDown)
    {
        game.physics.arcade.accelerationFromRotation(sprite.rotation, 200, sprite.body.acceleration);
    }
    else
    {
        sprite.body.acceleration.set(0);
    }

    if (cursors.left.isDown)
    {
        sprite.body.angularVelocity = -300;
    }
    else if (cursors.right.isDown)
    {
        sprite.body.angularVelocity = 300;
    }
    else
    {
        sprite.body.angularVelocity = 0;
    }

}
person PhotonStorm    schedule 25.02.2015
comment
Я использовал это решение, но безрезультатно. Кажется, не имеет значения, что движение вперед должно быть высоким, около 9000, а не 200. Я почти уверен, что это связано с тем, что currentSpeed ​​и maxSpeed ​​не указаны должным образом. - person Nathan Janman; 25.02.2015
comment
Боюсь, это не имеет ничего общего со ссылкой на currentSpeed ​​​​- фактический основной цикл, который вы используете, нарушен. Вам нужно сначала заставить это работать, прежде чем вы начнете вводить какие-либо ограничения скорости. Как я уже сказал, вам нужно удалить все, что использует скорость в вашем коде, а также удалить ограничения (maxVelocity и т. д.) и вернуться к базовой структуре выше, прежде чем добавлять ограничения скорости. - person PhotonStorm; 25.02.2015

вы никогда не использовали currentSpeed. Вы установили скорость -200 и 200 в velocityFromAngle.

person MamaWalter    schedule 24.02.2015
comment
так что вы говорите заменить 200 и -200 на currentSpeed? - person Nathan Janman; 24.02.2015