2015-02-24 1 views
1

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

//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, но по какой-то причине он не позволит мне использовать его. Консоль в браузере не дает мне никаких ошибок, поэтому, если кто-нибудь может направить меня на это, это будет здорово!

Спасибо.

ответ

3

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

Удалите эти линии и в своем обращении к 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; 
    } 

} 
+0

Я использовал это решение, но безрезультатно. Кажется, что разница в том, что движение вперед должно быть высоким, около 9000, а не 200. Я уверен, что это не так, что currentSpeed ​​и maxSpeed ​​не будут правильно указаны. –

+0

Это не связано с ссылкой на currentSpeed. Я боюсь, что основной цикл ядра, который вы используете, сломан. Прежде чем начинать вводить какие-либо ограничения скорости, вам нужно сначала запустить эту работу. Как я уже сказал, вам нужно удалить все, используя скорость в вашем коде, и удалить ограничения (maxVelocity и т. Д.) И вернуть его обратно к базовой структуре выше, прежде чем добавлять ограничения скорости. – PhotonStorm

0

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

+0

так, что вы говорите, это заменить 200 и -200 с currentSpeed? –

Смежные вопросы