相位器3禁用推送对象

问题描述

如果我推对象,则可以将其推到纹理上。如何禁用推入和将对象推入禁止区域的功能

    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#customSeparateXBody#customSeparateYexample的优势。请注意,在该示例中,您需要构建自己的Push Process,但这是在object1移入object2之后发生的。

Phaser v3.50.0-beta.7:

最近在此commit中添加了新的可推送组件,因此您可以使用那个Phaser版本或等待正式发布。我没有测试它,但我假设它工作得很好。如果您现在想知道推送过程在哪里发生,可以检查ProcessXProcessY

我希望它能对您有所帮助。