所以我正在重拍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;
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
答案 0 :(得分: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
但是你仍然需要考虑你在那个牢房中的位置。不要过度计算它。