Определить направление столкновения в Phaser3 - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь создать игру типа «Бомбардировщик» с использованием библиотеки Phaser3. Для этой цели я бы хотел определить отношения столкновений между игроком и кубиками , и что более важно - определить направление столкновения относительно игрока .

Я заметил, что свойства тела, такие как касаются или заблокированы , но они всегда имеют значение false. (см. ниже)

//scene.js

// bricks static group
this.scene.physics.add.staticGroup({ immovable: true });

// player defined in external file (as sprite)
this.player = new Player(this, 90, 90)

// player.js

// ... 

this.physics.add.collider(
  this, 
  scene.bricks,
  function(player, brick) {
  
    if(player.body.touching.left) { //ALWAYS FALSE!!!
        this.isBlockedFromLeft = true;
    }, else if(player.body.touching.right) {
        this.isBlockedFromRight = true; // ALWAYS FALSE!!!
    }
  },
  null,
  this
);

Буду признателен за любую помощь. Это сводит меня с ума. Может быть, есть лучший способ сделать это, и я что-то упускаю ...

Заранее спасибо.

1 Ответ

0 голосов
/ 06 марта 2020

Итак, я наконец-то понял это.

Основной проблемой было то, как я определял движение игрока. Это должно быть

  if (this.keyboard.right.isDown) {
    this.body.setVelocityX(this.speed);
  }

, а не

  if (this.keyboard.right.isDown) {
    this.x += this.speed;
  }

Второй способ предотвращения обнаружения столкновений и body.touching и body.blocked свойства, подлежащие обновлению.

Кроме того, я обнаружил, что когда дело доходит до нисходящих плиточных игр, действительно проще создать игру с помощью функции tile-map . официальные примеры можно найти здесь: https://phaser.io/examples/v3/search?search=map и вот руководство по созданию мозаичной карты с использованием легковесного программного обеспечения под названием «Tiled» https://www.youtube.com/watch?v=2_x1dOvgF1E

Спасибо всем!

...