[英]Phaser3: Detecting sprite collision
使用Phaser 3,我無法檢測兩個精靈之間的碰撞。 我一直在上下文檔和幾個例子,大多數是從Phaser 2過時的,並且由於某種原因它只是不起作用。
我要去的是一系列mapTiles和一個玩家角色。 現在,我將牆壁 , 地板和門都傳遞到對撞機只是為了測試目的而沒有任何事情發生。
正如你在下面的代碼中看到的,我確實有一個使用this.enemies數組的對撞機,所以我不確定為什么它不能使用this.mapTiles 。 此外,在檢查我的mapTiles的類型時,它們每個都被標記為Sprite ,我的敵人顯然被標記為ArcadeSprite ,這可能是問題嗎?
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
}
}
我決定減少一些代碼,並給出一個小的3行示例,說明什么不起作用。
這是一個只有兩個精靈,仍然無法正常工作。 這個小例子將放在我的場景創建方法中。
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)
碰撞不起作用,因為精靈沒有物理體。
如你所知,mapTiles是Sprite
類型,其中敵人是ArcadeSprite
意味着他們有一個物理體。
創建它們的不同之處在於工廠使用。
this.add.sprite(...)
使用GameObject工廠(Sprites是this.physics.add.sprite(...)
), this.physics.add.sprite(...)
使用物理Arcade工廠,它創建一個精靈,並給它一個物理體。
因此,在最小示例的代碼中,使用this.physics.add.sprite(...)
更改您對使用物理工廠創建sprite的調用,它應該可以工作。
我不知道你的地圖生成器代碼是什么樣的,但我認為它將是一個類似的修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.