如何根据屏幕位置计算矩阵中的位置
How to calculate the position in matrix based on screen position
所以我正在重制 pacman 并使用 XNA 和 .NET 来构建它。
我设置了一个 448x576 的屏幕尺寸和一个 28x36 的矩阵,其中矩阵中的每个位置响应 16px x 16px
448 / 16 = 28
576 / 16 = 36
这是我根据矩阵中的位置计算屏幕位置的方法:
public Vector2 GetPositionAt(int col, int row)
{
int X = ((col) * 16) + 8;
int Y = ((row) * 16) + 8;
return new Vector2(X, Y);
}
反向代码为:
float col = ((position.X - 8) / 16);
float row = ((position.Y - 8) / 16);
return new MatrixPosition((int)col, (int)row);
但这不起作用,因为只有当吃豆子位置在矩阵中的位置中心时,位置才会更新。我想在接近新点的时候做出来
让我用图片解释一下(抱歉不能post还没有图片):
http://imgur.com/a/CYekd
float col = ((position.X - 8) / 16);
float row = ((position.Y - 8) / 16);
如果您替换 position.X = 8 和 position.Y = 18:
col = ((8 - 8) / 16)
= 0 / 16
= 0
row = ((18 - 8) / 16)
= 10 / 16
= 0
整数无法按照您希望的方式工作。我理解您为什么使用 -8 来找到正方形的中心,但是您不能简单地使用该方法正确地划分。
col = position.X / 16
row = position.Y / 16
但是您仍然需要说明您在该单元格中的位置。别计较太多了。
所以我正在重制 pacman 并使用 XNA 和 .NET 来构建它。
我设置了一个 448x576 的屏幕尺寸和一个 28x36 的矩阵,其中矩阵中的每个位置响应 16px x 16px
448 / 16 = 28 576 / 16 = 36
这是我根据矩阵中的位置计算屏幕位置的方法:
public Vector2 GetPositionAt(int col, int row)
{
int X = ((col) * 16) + 8;
int Y = ((row) * 16) + 8;
return new Vector2(X, Y);
}
反向代码为:
float col = ((position.X - 8) / 16);
float row = ((position.Y - 8) / 16);
return new MatrixPosition((int)col, (int)row);
但这不起作用,因为只有当吃豆子位置在矩阵中的位置中心时,位置才会更新。我想在接近新点的时候做出来
让我用图片解释一下(抱歉不能post还没有图片): http://imgur.com/a/CYekd
float col = ((position.X - 8) / 16);
float row = ((position.Y - 8) / 16);
如果您替换 position.X = 8 和 position.Y = 18:
col = ((8 - 8) / 16)
= 0 / 16
= 0
row = ((18 - 8) / 16)
= 10 / 16
= 0
整数无法按照您希望的方式工作。我理解您为什么使用 -8 来找到正方形的中心,但是您不能简单地使用该方法正确地划分。
col = position.X / 16
row = position.Y / 16
但是您仍然需要说明您在该单元格中的位置。别计较太多了。