You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Phaser引入物理模块后游戏对象消失的技术问题求助

问题原因及解决方法

问题出在Rocket类的物理体未正确注册到Phaser物理引擎:
你继承了Phaser.Physics.Arcade.Sprite,但构造函数里只调用了scene.add.existing(this)——这仅将精灵添加到画面显示列表,没有让物理引擎接管它。加上配置里的重力设置,未初始化的物理体导致火箭瞬间被“拉”出屏幕。

修复步骤

修改Rocket类的构造函数,把scene.add.existing(this)替换为scene.physics.add.existing(this),这样物理引擎会正确初始化精灵的物理属性:

export default class Rocket extends Phaser.Physics.Arcade.Sprite{
    constructor(scene, x,y){
        super(scene, x, y, 'rocket')
        // 替换为physics.add.existing,注册到物理世界
        scene.physics.add.existing(this)
        this.setInteractive().on('pointerdown',() =>  {
               this.alpha= 0.5})
    }
}

额外说明

  • scene.physics.add.existing(this)内部已经包含了将精灵添加到显示列表的逻辑,所以不需要再额外调用scene.add.existing。
  • 修复后可以取消MainScene中update函数的注释,测试火箭的移动逻辑:
update(time: number, delta:number): void{
    this.rocket.body.velocity.x += 3;
}

此时火箭会在重力作用下向下移动,同时不断增加水平速度。

内容的提问来源于stack exchange,提问作者user1447156

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:42:43