如何在Phaser 3精灵中添加物理学?

时间:2019-03-22 14:37:33

标签: typescript phaser-framework

我正在尝试在打字稿项目中实现Phaser 3 documentation for physics sprites,但这似乎没有预期的那么直接:

不工作

export class BMO extends Phaser.Physics.Arcade.Sprite {

    constructor(scene) {
        super(scene, 100,150, "bmo")
        this.scene.add.existing(this)
    }

    create(){
        this.setVelocity(100, 200);
        this.setBounce(1, 1);
        this.setCollideWorldBounds(true);
    }
}

但是创建new BMO()时,子画面没有物理特性。 物理引擎本身正在工作,因为我可以传递图像并且它可以工作:

工作

export class GameScene extends Phaser.Scene {

  create(){
    let logo = this.physics.add.image(400, 100, 'bmosmall')
    logo.setVelocity(100, 200);
    logo.setBounce(1, 1);
    logo.setCollideWorldBounds(true);
  }
}

FIX?

因此,也许仍然需要将子画面手动添加到物理引擎中(即使它是物理子画面),但是不可能将整个子画面作为参数传递:

 export class BMO extends Phaser.Physics.Arcade.Sprite {
     create(){
        this.scene.physics.add.sprite(this)
     }
 }

如何创建Phaser.Physics.Arcade.Sprite实例?

3 个答案:

答案 0 :(得分:1)

我认为您只需要在类中添加 scene.physics.add.existing(this);

export class BMO extends Phaser.Physics.Arcade.Sprite {

    constructor(scene) {
        super(scene, 100,150, "bmo")
        scene.physics.add.existing(this); // add this line
        this.scene.add.existing(this)
    }

    create(){
        this.setVelocity(100, 200);
        this.setBounce(1, 1);
        this.setCollideWorldBounds(true);
    }
}

答案 1 :(得分:0)

您应该在Phaser.Game配置中包含一个物理部分。

答案 2 :(得分:0)

我只是遇到了同样的问题。我在这里找到了答案:

https://rexrainbow.github.io/phaser3-rex-notes/docs/site/arcade-body/

简而言之:

scene.physics.add.existing(gameObject, isStatic)

我还没有检查可以通过这种方式添加或扩展哪些类型的GameObject,但是我猜想它们中的任何一种都可以,而不仅仅是Physics.*.*