Javascript Phaser3-在Physics arcade发动机上为车辆添加加速度和阻力
我正在做一个简单的自上而下的汽车游戏。此刻,我的汽车以恒定的速度行驶 然而,我希望它的行为更加真实,应用了阻力/摩擦/加速度等元素,有点像上一个例子 我如何使用Phaser Physics arcade引擎(我的游戏其余部分目前使用的引擎)让它以这种方式运行 我的代码如下:Javascript Phaser3-在Physics arcade发动机上为车辆添加加速度和阻力,javascript,phaser-framework,Javascript,Phaser Framework,我正在做一个简单的自上而下的汽车游戏。此刻,我的汽车以恒定的速度行驶 然而,我希望它的行为更加真实,应用了阻力/摩擦/加速度等元素,有点像上一个例子 我如何使用Phaser Physics arcade引擎(我的游戏其余部分目前使用的引擎)让它以这种方式运行 我的代码如下: import Phaser from "phaser"; const config = { type: Phaser.AUTO, parent: "phaser-example&quo
import Phaser from "phaser";
const config = {
type: Phaser.AUTO,
parent: "phaser-example",
width: 800,
height: 600,
physics: {
default: "arcade",
arcade: {
debug: true
}
},
scene: {
preload: preload,
create: create,
update: update,
render: render
}
};
const game = new Phaser.Game(config);
let platform;
let player;
let cursors;
function preload() {
this.load.image("car", "https://labs.phaser.io/assets/sprites/car90.png");
this.load.image("sky", "https://labs.phaser.io/assets/skies/gradient11.png");
}
function create() {
this.add.image(400, 300, "sky");
player = this.physics.add.sprite(400, 300, "car", 1);
player.body.setBounce(20, 20);
player.setCollideWorldBounds(true);
cursors = this.input.keyboard.createCursorKeys();
this.physics.add.collider(player, platform);
}
function update() {
player.body.velocity.x = 0;
player.body.velocity.y = 0;
player.body.angularVelocity = 0;
if (cursors.left.isDown) {
player.body.angularVelocity = -150;
}
if (cursors.right.isDown) {
player.body.angularVelocity = 150;
}
if (cursors.up.isDown) {
this.physics.velocityFromRotation(
player.rotation,
150,
player.body.velocity
);
}
if (cursors.down.isDown) {
this.physics.velocityFromRotation(
player.rotation,
-150,
player.body.velocity
);
}
}
function render() {}
Stackblitz演示如下:。对于拖动,您可以将此语句添加到
create()
函数中:
player.setDrag(0.90);
对于恒定速度,您可以将update()
部分更改为:
if (cursors.up.isDown) {
// Go faster
player.body.acceleration.setToPolar(player.rotation, 100);
}
if (cursors.down.isDown) {
// Brake
let speed = player.body.velocity.length();
player.body.acceleration.setToPolar(player.rotation - Math.PI, 2 * speed);
if (speed < 3) {
// Come to a full stop
player.body.setVelocity(0);
}
}
if(cursors.up.isDown){
//快一点
玩家。身体。加速度。设置地形(玩家。旋转,100);
}
if(游标。向下。isDown){
//刹车
让速度=player.body.velocity.length();
player.body.acceleration.setToPolar(player.rotation-Math.PI,2*速度);
如果(速度<3){
//停下来
玩家。身体。设定速度(0);
}
}
这不是设置速度,而是将前进加速度设置为固定值。上面的代码不允许玩家倒退。这可能不是你想要的
如果车速低于某个数字,例如3,您也可以阻止转弯。您能分享一个这样做的例子吗?有点挣扎。谢谢,我已经尝试在这里实现了这一点:但是当我放开前进键时,加速不会继续。而且刹车似乎不起作用。您能看一下并帮我一下吗?松开键盘后,车立即停了下来,因为有以下几行:
player.body.velocity.x=0
。我把它们注释掉了:谢谢,刹车时仍然有一些古怪的行为。倒车时,车辆应减速至停止,然后加速。这似乎不可能做到。边缘的碰撞看起来有点疯狂哈哈。