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
相关产品推荐
相关产品推荐

