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

Phaser:相机移动后鼠标跟随/拖拽对象与鼠标错位问题求助

问题修复方案

问题出在你使用了鼠标的屏幕坐标(pointer.x/pointer.y)来设置精灵位置,但精灵的坐标属于世界坐标系统。当相机移动时,世界坐标和屏幕坐标会产生偏移,直接用屏幕坐标就会导致精灵偏离鼠标实际对应的世界位置。

修复方法

将鼠标的屏幕坐标转换为相机对应的世界坐标即可,有两种简单的实现方式:

方式1:使用Pointer的世界坐标属性(Phaser 3.16+支持)

Phaser的Pointer对象自带worldX和worldY属性,已经帮你完成了屏幕到世界坐标的转换,直接替换原有代码即可:

this.input.on('pointermove', function (pointer) {
   this.circle.setPosition(pointer.worldX, pointer.worldY);
}, this);

方式2:通过相机方法手动转换

如果使用较低版本的Phaser,可以调用相机的getWorldPoint方法完成坐标转换:

this.input.on('pointermove', function (pointer) {
   const worldPos = this.cameras.main.getWorldPoint(pointer.x, pointer.y);
   this.circle.setPosition(worldPos.x, worldPos.y);
}, this);

通用适配

所有需要跟随鼠标或拖拽的对象,都需要使用世界坐标来计算位置,确保对象的位置始终和相机的偏移保持同步,这样就能避免相机移动后出现的坐标错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:07:23