[英]How to convert from mouse coordinates to world coordinates in a Javascript canvas game?
我正在使用 2d Canvas API 在 Javascript 中开发一个简单的自上而下的游戏。 目前,我让相机始终以播放器为中心,因此它们始终位于屏幕的中心。 这样做是这样的:
let camX = -player.pos.x + this.canvas.width / 2;
tet camY = -player.pos.y + this.canvas.height / 2;
this.context.translate(camX, camY);
它似乎工作得很好。 当我想让玩家点击屏幕上的某个地方并将该点击转换为世界坐标时,我的问题就出现了。 也就是说,如果玩家点击某处,我应该可以使用相对鼠标position结合相机变换来获得点击的世界坐标。
我认为它会像下面这样简单:
let worldX = -camX + input.mousePosition.x;
let worldY = -camY + input.mousePosition.y;
但这似乎不起作用。 如果我使用的是普通相机 object,我会采用我认为的逆矩阵,但这只是一个简单的 canvas,所以我不确定在这种情况下是否可以这样做。
我想到了。 这是因为我正在使用缩放,这会导致计算失败。 我不确定如何手动执行,但我发现 canvas 具有矩阵变换和逆函数,因此我创建了这两个函数,它们似乎可以工作:
static getWorldCoordsFromRelative(ctx: any, position: Vec2) {
let matrix = ctx.getTransform();
var imatrix = matrix.invertSelf();
return new Vec2(position.x * imatrix.a + position.y * imatrix.c + imatrix.e,
position.x * imatrix.b + position.y * imatrix.d + imatrix.f);
}
static getRelativeCoordsFromWorldCoords(ctx: any, position: Vec2) {
let matrix = ctx.getTransform();
return new Vec2(position.x * matrix.a + position.y * matrix.c + matrix.e,
position.x * matrix.b + position.y * matrix.d + matrix.f);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.