0

好的,所以我有一个刚开始的游戏,我有点卡在平滑滚动上。我已经完成了基本的滚动部分,但我的背景(网格)只移动了 50 个间隔。

for (int x = (getPlayerX() / getTileSize()) - 6; x < (getPlayerX() / getTileSize()) + 9; x++)
{
    for (int y = (getPlayerY() / getTileSize()) - 5; y < (getPlayerY() / getTileSize()) + 8; y++)
    {

        int xPos = ((x - (getPlayerX() / tileSize)) + (getScreenX() / tileSize) - 1) * tileSize;
        int yPos = ((y - (getPlayerY() / tileSize)) + (getScreenY() / tileSize) - 1) * tileSize;
        if (x > 0 && x < mapX && y > 0 && y < mapY)
        {
            if (getTiles()[x][y].tileID == 0)
            {
                g.drawRect(xPos, yPos, tileSize, tileSize);
            }

            if (getTiles()[x][y].tileID == 1)
            {
                g.fillRect(xPos, yPos, tileSize + 1, tileSize + 1);
            }
        }
    }
}

很抱歉 for 循环中的减法和加法,我已经设置了它们,所以它会显示从 1 到任何而不是 0 到任何 - 1。

所以基本上我想重绘网格我移动的每个像素,而不是每 50 个。我不想遍历屏幕上的每个像素

4

1 回答 1

0

好的,起初你对背景和网格感到困惑。网格是一种检查碰撞的方法,也是一种永不移动的空间分区算法。背景是在游戏中每个级别的每个实体后面绘制的图像。

根据我的理解,您要做的是使关卡滚动。为此,我们创建了一个名为 a 的类ViewCamera它通过将玩家控制的实体居中来绘制背景和可见实体。

为了使实体居中并绘制地图,我使用了这些类。希望你明白我是用 C# 编写的。

这是我的Grid实现。我在这里有相同类的 java 版本,但我没有在 java 中实现 Grid 类。

您可以阅读我的教程Using Grids For Collisions以获取有关其工作原理的更多信息。希望能帮助到你。

于 2013-07-16T08:29:33.950 回答