在 Phaser 中设置汽车的最大速度和当前速度
Set the maximum and current speed of a car in Phaser
我正在使用使用 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 但出于某种原因它不允许我实际使用它。浏览器中的控制台没有给我任何错误,所以如果有人可以指导我,那就太好了!
谢谢。
您从未使用过currentSpeed
。您在 velocityFromAngle
.
中将速度设置为 -200
和 200
它停止不动的原因是因为你以速度而不是加速度移动它 - 并且在你的更新循环中将速度设置为零(这实际上是说 "stop, now!")。
删除这些行,在您对 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;
}
}
我正在使用使用 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 但出于某种原因它不允许我实际使用它。浏览器中的控制台没有给我任何错误,所以如果有人可以指导我,那就太好了!
谢谢。
您从未使用过currentSpeed
。您在 velocityFromAngle
.
-200
和 200
它停止不动的原因是因为你以速度而不是加速度移动它 - 并且在你的更新循环中将速度设置为零(这实际上是说 "stop, now!")。
删除这些行,在您对 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;
}
}