Phaser 3 - отскок спрайта при столкновении с объектом - PullRequest
0 голосов
/ 04 августа 2020

В Phaser3, как вы заставляете спрайт отскакивать, когда он сталкивается с объектом? На данный момент я могу обнаружить столкновение, но я хочу, чтобы машина отскакивала при столкновении.

Мой код:

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');
  this.load.image('ground', 'https://labs.phaser.io/assets/sprites/platform.png');
}

function create() {
  this.add.image(400, 300, 'sky');
  
  platform = this.physics.add.image(400, 400, 'ground');
  platform.body.setBounce(20, 20);
  platform.setImmovable(true);

  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 = -40;
  }
  if (cursors.right.isDown) {
    player.body.angularVelocity = 40;
  }

  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: https://stackblitz.com/edit/phaser3-typescript-ctun9e

1 Ответ

0 голосов
/ 05 августа 2020

Во-первых, ваша скорость сбрасывается до 0 каждый кадр и сбрасывается до статического c значения в зависимости от ввода с клавиатуры. Отскок - это событие, которое изменяет скорость тела объекта, поэтому сброс этой скорости в каждом кадре обновления будет выглядеть так, как будто set bounce не работает.

Во-вторых, set bounce ожидает плавающее значение между 0 и 1, это выглядит например, вы можете установить его выше для столкновения, которое отражается быстрее, чем входящая скорость, но 20 - это слишком много, как только он сталкивается со значением выше 1, спрайт начинает сталкиваться со всеми границами мира со все возрастающей скоростью.

Связал вилку вашего stackblitz с установленным bounce на 1 и удалением сброса скорости, когда клавиши не нажимаются. Stackblitz

...