1

在给定纹理位置和相机位置的情况下,我一直无法实现一种算法来移动纹理。图像中的前两张图片解释了我要完成的工作,但我不知道如何相应地移动它们。曾几何时,我创建了一个程序来执行此操作,但我已经失去了它。有任何想法吗?

如果有帮助,相机/视口的宽度和高度与纹理的宽度和高度相同。目标是让他们移动位置,给人一种无限平面的错觉。(无需绘制无限平面,哈哈。)

前两个例子:

4

2 回答 2

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
  }

这清楚吗?

于 2012-12-19T23:12:43.583 回答
-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 是相机位置,而 region 是区域/纹理/矩形/其他。

此代码适用于 4 个正方形区域(2 个区域乘 2 个区域)。要更改更多区域,只需将 9 平方区域和 16 平方区域的所有 *2 分别更改为 *3 或 *4。

于 2012-12-20T00:49:51.290 回答