我一直无法实现一种算法来根据位置和摄像机位置移动纹理。图像中的前两张图片解释了我想要完成的任务,但我无法弄清楚如何相应地移动它们。我曾经创建了一个程序,但是我已经离开了并失去了它。有什么想法吗?
如果它有帮助,Cameras / Viewports的宽度和高度与纹理的宽度和高度相同。目标是让他们转移位置,给出无限平面的错觉。 (无需绘制无限平面,哈哈。)
答案 0 :(得分:1)
你真的不需要移动你的区域,足以决定在哪里绘制它们。让我们假设你有一个包含N * M块的地形(在这种情况下N = M = 2),每个块的大小都是A * A(在这种情况下,屏幕的大小相同,但这没关系),和瓷砖不断相互追随。
int LeftColumn = Camera.X / A; // let it round to nearest lower int
int TopRow = Camera.Y / A;
LeftColumn = LeftColumn % N; // Calculate the first tile
TopRow = TopRow % M;
for (int i = LeftColumn+N; i < LeftColumn+2*N; i++)
for (int l = TopRow+M; l < TopRow+2*M; l++)
// you may check here if the tile is visible or not based on the screen size
{
Tile[i % N, l % M].Draw(i*A, l*A); // Or do whatever you like
}
这是清楚的吗?
答案 1 :(得分:-1)
经过几个小时的反复试验,我终于想出了如何让区域/纹理/矩形相应地移动。对于那些想要解决方案的人来说,
if ((int)Math.Abs(region.X - camPos.X) > region.Width * 2)
{
region.X += region.Width * 2;
}
if (camPos.X < region.X - region.Width)
{
region.X -= region.Width * 2;
}
if ((int)Math.Abs(region.Y - camPos.Y) > region.Height * 2)
{
region.Y += region.Height * 2;
}
if (camPos.Y < region.Y - region.Height)
{
region.Y -= region.Height * 2;
}
其中camPos是摄影机位置,区域是区域/纹理/矩形/其他。
此代码适用于4平方区域(2个区域2个区域)。要更改更多区域,只需将所有* 2s分别更改为* 3s或* 4s,分别为9平方区域和16平方区域。