在Laya中将屏幕中的局部坐标转为世界坐标的方法是使用Laya.stage的mouseX和mouseY属性获取屏幕坐标,然后使用Laya.stage的globalToLocal方法将屏幕坐标转换为局部坐标,再使用节点的localToGlobal方法将局部坐标转换为世界坐标。

具体代码如下:

// 获取屏幕坐标
var screenX = Laya.stage.mouseX;
var screenY = Laya.stage.mouseY;

// 将屏幕坐标转换为局部坐标
var localPos = Laya.stage.globalToLocal(new Laya.Point(screenX, screenY));

// 将局部坐标转换为世界坐标
var worldPos = node.localToGlobal(localPos);

如果局部坐标的上层中使用了缩放,那么在进行坐标转换时需要考虑缩放的影响。具体方法是先将局部坐标转换为节点的原始局部坐标(即没有缩放的局部坐标),然后再进行坐标转换。

具体代码如下:

// 获取屏幕坐标
var screenX = Laya.stage.mouseX;
var screenY = Laya.stage.mouseY;

// 将屏幕坐标转换为节点的原始局部坐标
var localPosRaw = node.globalToLocal(new Laya.Point(screenX, screenY));
var localPos = new Laya.Point(localPosRaw.x / node.scaleX, localPosRaw.y / node.scaleY);

// 将局部坐标转换为世界坐标
var worldPos = node.localToGlobal(localPos);

如果缩放系数不可知,那么不能直接使用节点的scaleX和scaleY属性进行坐标转换。此时可以通过计算节点的世界变换矩阵来获取缩放系数,然后使用计算得到的缩放系数进行坐标转换。

具体代码如下:

// 获取屏幕坐标
var screenX = Laya.stage.mouseX;
var screenY = Laya.stage.mouseY;

// 将屏幕坐标转换为节点的原始局部坐标
var localPosRaw = node.globalToLocal(new Laya.Point(screenX, screenY));
var matrix = node.getMatrix();
var scaleX = Math.sqrt(matrix.a * matrix.a + matrix.b * matrix.b);
var scaleY = Math.sqrt(matrix.c * matrix.c + matrix.d * matrix.d);
var localPos = new Laya.Point(localPosRaw.x / scaleX, localPosRaw.y / scaleY);

// 将局部坐标转换为世界坐标
var worldPos = node.localToGlobal(localPos);
Laya 坐标转换:屏幕坐标、局部坐标、世界坐标,及缩放处理

原文地址: https://www.cveoy.top/t/topic/nVwz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录