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

Phaser框架中如何移动静态精灵碰撞盒且不受重力影响?

解决Phaser中可移动无重力碰撞精灵的问题

方案一:使用动态精灵并禁用重力(推荐)

静态刚体的设计目标是静止物体,移动后碰撞盒不会自动同步位置。更合理的方式是用动态物理精灵,直接关闭重力属性,这样既能保留可移动性和碰撞盒自动跟随的特性,又能完全不受重力影响:

// 创建普通物理精灵
this.marker = this.physics.add.sprite(0, 0, "tileSnap");
// 禁用重力
this.marker.body.allowGravity = false;

// 后续移动示例(碰撞盒会自动同步位置)
this.marker.setPosition(200, 150);
// 或者用补间动画移动
this.tweens.add({
    targets: this.marker,
    x: 300,
    y: 200,
    duration: 1000
});

方案二:使用静态精灵并手动刷新碰撞盒

如果一定要使用静态精灵,每次移动后必须调用refreshBody()方法强制更新碰撞盒的位置,否则碰撞盒会停留在初始坐标:

// 创建静态精灵
this.marker = this.physics.add.staticSprite(0, 0, "tileSnap");

// 移动精灵后刷新碰撞盒
this.marker.setPosition(100, 100);
this.marker.body.refreshBody();

注意:频繁调用refreshBody()可能带来性能开销,仅适合静态精灵偶尔移动的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:50:26