Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Phaser3-在Physics arcade发动机上为车辆添加加速度和阻力_Javascript_Phaser Framework - Fatal编程技术网

Javascript Phaser3-在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

我正在做一个简单的自上而下的汽车游戏。此刻,我的汽车以恒定的速度行驶

然而,我希望它的行为更加真实,应用了阻力/摩擦/加速度等元素,有点像上一个例子

我如何使用Phaser Physics arcade引擎(我的游戏其余部分目前使用的引擎)让它以这种方式运行

我的代码如下:

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
。我把它们注释掉了:谢谢,刹车时仍然有一些古怪的行为。倒车时,车辆应减速至停止,然后加速。这似乎不可能做到。边缘的碰撞看起来有点疯狂哈哈。