Phaser我的Phaser.Physics.Arcade.Sprite中缺少一些方法

问题描述

我正在尝试使用Phaser 3游戏引擎来构建游戏。我正在使用TypeScript并为每个实体编写类。

我从背景中的一些乌云开始。我开始删除拱廊重力,并为风添加了velocityX。我的课看起来像这样

class Cloud extends Phaser.Physics.Arcade.Sprite {
    constructor(scene,x,y) {
        super(scene,y,'cloud');
        this.setGravityY(0);
        return this;
    }

    static preload(scene) {
        scene.load.image('cloud',cloudAsset);
    }
}

但是我遇到类型错误

未捕获的TypeError:无法读取null的属性'gravity'

这对我来说毫无意义,因为方法setGravityY是扩展的,您可以在下面的屏幕快照中看到它。

enter image description here

那为什么body是不确定的?我认为扩展Phaser.Physics.Arcade.Sprite应该具有主体。就像这里的文档一样

enter image description here

解决方法

您认为Arcade Sprite应该具有主体是正确的。但是场景的物理原理还不知道这个游戏对象。因此,您必须像这样将其添加到场景物理中:

class Cloud extends Phaser.Physics.Arcade.Sprite {
    constructor(scene,x,y) {
        super(scene,y,'cloud');
        scene.physics.add.existing(this); //here you add this existing sprite object to scene's physics 
        this.setGravityY(0);
        return this;
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...