问题描述
如果我推对象,则可以将其推到纹理上。如何禁用推入和将对象推入禁止区域的功能?
let map = this.make.tilemap({key: 'map'});
let tiles = map.addTilesetimage('map','tiles');
this.grass = map.createStaticLayer('Ground/Base',tiles,0);
let obstacles = map.createStaticLayer('tree',0);
obstacles.setCollisionByExclusion([-1]);
let player = new Player(this,50,100);
let enemy = new Enemy(this,100,100);
this.player = this.physics.add.existing(player);
this.enemy = this.physics.add.existing(enemy);
let players = this.physics.add.group();
players.addMultiple([
player,enemy
]);
this.physics.add.collider(players,obstacles);
this.physics.add.collider(players,players,(player1,player2) => {
player1.body.setVeLocity(0);
player2.body.setVeLocity(0);
});
玩家与敌人扩展了Phaser.Physics.Arcade.Sprite; setImmovable()-不变。
解决方法
我是使用Phaser的新手,但这是我在阅读github时发现的:
如果您使用的是Phaser v3.24.1或更低版本:
您可以检查SeparateX是处理被称为Push的函数的地方,here是被推动的地方,而here是被弹跳的地方,请看一下body1.velocity.x = avg + nv1 * body1.bounce.x
仅对nv1发生乘法运算,这就是为什么将bounce设置为0都没关系,但仍然会被反弹的原因。还存在SeparateY。
也许您可以利用Body#customSeparateX
和Body#customSeparateY
,example的优势。请注意,在该示例中,您需要构建自己的Push Process,但这是在object1移入object2之后发生的。
Phaser v3.50.0-beta.7:
最近在此commit中添加了新的可推送组件,因此您可以使用那个Phaser版本或等待正式发布。我没有测试它,但我假设它工作得很好。如果您现在想知道推送过程在哪里发生,可以检查ProcessX和ProcessY。
我希望它能对您有所帮助。