Использование Phaser 3 и у меня проблемы с обнаружением столкновения между двумя спрайтами.Я пробежал вверх и вниз по документам и нескольким примерам, в основном устаревшим из Phaser 2, и по какой-то причине он просто не работает.
У меня есть массив mapTiles и игрок персонаж.Прямо сейчас у меня есть стены , этажи и двери , которые все передаются на коллайдер только для целей тестирования, и ничего не происходит.
Как видно из приведенного ниже кода, у меня есть коллайдер, работающий с массивом this.enemies , поэтому я не уверен, почему он не работает с this.mapTiles .Кроме того, при проверке типов моих mapTiles каждый из них помечается как Sprite , а мои враги явно помечаются как ArcadeSprite , может ли этобыть проблемой?
![enter image description here](https://i.stack.imgur.com/Jqv48.png)
Dungeon.js
import 'phaser';
import {
Enemy,
MapGenerator,
PlayerCharacter
} from '../game_objects/index'
class DungeonScene extends Phaser.Scene {
constructor() {
super({ key: 'DUNGEON' });
this.mapTiles = []
this.walls = []
this.player = null
this.enemies = []
this.entities = []
}
preload() {
this.load.spritesheet('sprites', 'src/arial10x10.png', { frameWidth: 10, frameHeight: 10 })
}
create() {
this.createMap()
this.player = new PlayerCharacter('PC', this, 9, 9, 'sprites', 32, { health: 100, atk: 10 }, [])
this.enemies = [
new Enemy('E1', this, 64, 64, 'sprites', 100, { health: 100, atk: 10 }, [])
]
this.keyboard = this.input.keyboard.addKeys('W, A, S, D')
// this works but not by default; aka it requires a callback to do anything
// which is odd because examples show it working without a callback
this.physics.add.collider(this.player, this.enemies, () => {
this.scene.restart()
})
// DOES NOT WORK
this.physics.add.overlap(this.player, this.mapTiles, () => console.log('overlap'))
// DOES NOT WORK
this.physics.add.collider(this.player, this.mapTiles, () => console.log('collider'))
}
createMap() {
const mapGenerator = new MapGenerator(this, 39, 39, 9, 9)
mapGenerator.create()
this.mapTiles = mapGenerator.mapTiles
}
}
Edit
Я решил сократить некоторыекод, а также дать небольшой пример из 3 строк, что не работает.
Это один с двумя спрайтами и все еще не работает.Этот небольшой пример будет помещен в мои сцены метод create .
this.foo = this.add.sprite(10, 10, 'sprites', 32)
this.bar = this.add.sprite(30, 30, 'sprites', 2)
this.physics.add.collider(this.foo, this.bar)