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

