如何根据屏幕位置计算矩阵中的位置

3

我正在制作一款Pacman的翻版游戏,使用XNA和.NET构建。

我设置了一个448x576的屏幕尺寸和一个28x36的矩阵,其中矩阵中每个位置对应16像素乘以16像素。

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);

但是这样做是不起作用的,因为位置只有在pacman位置在矩阵位置中心时才会更新。我想让它在靠近新点时更新。
让我用图片来解释(抱歉还不能发布图片):http://imgur.com/a/CYekd
1个回答

2
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

但是你仍需要考虑你在单元格中的位置。不要过度计算。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接