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

C# 如何根据屏幕位置计算矩阵中的位置,c#,.net,matrix,xna,pacman,C#,.net,Matrix,Xna,Pacman,所以我正在重拍《吃豆人》,我正在使用XNA和.NET来构建它 我已经设置了一个448x576的屏幕大小和一个28x36的矩阵,其中矩阵中的每个位置响应16px乘以16px 448/16=28 576/16=36 这是我根据矩阵中的位置计算屏幕位置的方式: public Vector2 GetPositionAt(int col, int row) { int X = ((col) * 16) + 8; int Y = ((row) * 16) + 8;

所以我正在重拍《吃豆人》,我正在使用XNA和.NET来构建它

我已经设置了一个448x576的屏幕大小和一个28x36的矩阵,其中矩阵中的每个位置响应16px乘以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);
但这不起作用,因为只有当pacman位置位于矩阵中位置的中心时,位置才会更新。我想在接近新点的时候做到

让我用图片解释一下(对不起,现在还不能发布图片):

如果替换位置X=8和位置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
但你仍然需要说明你在牢房里的位置。不要过度计算

col = position.X / 16
row = position.Y / 16