我是Phaser的新手,并且在调整精灵的Hitbox方面存在问题,尤其是碰撞。这是一个有点人为的例子来强调我所拥有的问题,而不是最佳实践等。
正如你在下面的例子中看到的,我有2个精灵,1个角色和1个敌人,它们都有边界框(用debug.spriteBounds(绿色)显示)。
当我攻击时,我将玩家的精灵更改为更大的精灵,特别是一个人用剑在短时间内砍刀。
正如你可以看到更改精灵时,边界框也会调整大小,所以剩下的就是让我检查是否发生了碰撞,这是我遇到问题的部分。
这是我的代码段
if (this.attackRight.justDown) {
console.log('attacking');
console.log('boundsBeforeAttack=', this.player._bounds);
this.player.loadTexture('playerAttack', 0);
this.g.time.events.add(Phaser.Timer.SECOND * 0.5, function () {
console.log('boundsduringattack=', this.player._bounds);
console.log('touchingright=', this.player.body.touching.right);
}, this);
this.g.time.events.add(Phaser.Timer.SECOND * 3.25, function () {
this.player.loadTexture('player', 0);
}, this);
}
以下是输出:
attacking
_player.js:95 boundsBeforeAttack= c.Rectangle {x: 856.0833333333328, y: 737.0416666666679, width: 32, height: 32, offset: function…}
_player.js:100 boundsduringattack= c.Rectangle {x: 828.3333333333328, y: 737.6944444444443, width: 87.5, height: 32, offset: function…}
_player.js:101 touchingright= false
正如您所看到的那样,边界越来越大,但这似乎并未得到尊重。我想让自己变得正确。
我尝试过的其他事情玩家.body.reset();似乎没有做任何事情,使用physics.arcade.collide和overlay方法也可以做同样的事情。
答案 0 :(得分:1)
arcade.collide
或arcade.overlap
来更新 debug.body
。有关基础知识,请参阅http://phaser.io/examples/v2/arcade-physics/one-way-collision(忽略单向部分)。
给你的精灵物理团体并使用debug.spriteBounds
(而不是gdata-version: 3.0
)。