0

这太奇怪了,我一辈子都想不通。

我正在研究一个奇怪的 pacman 克隆,您可以在其中放大并随机生成地图。它本质上是一个迷宫游戏。

我的问题是,当我生成地图,然后让地图而不是玩家移动(将玩家保持在屏幕中央,地图的各个部分以不同的速度移动。我有一个数组(9x9)包含地图的不同部分。每个部分都是一个 .png 文件。.png 是我用黑色路径和蓝色墙壁制作的图片。

我有一系列 11 个(每个都有不同的形状)。当地图生成时,他们每个人都被赋予一个相对于中心(玩家开始的地方)的位置,对应于他们在数组中的位置。当玩家移动时,屏幕中的图像也应该移动,然后其余部分的位置相对于移动发生变化。它只绘制玩家可见的棋子,以使游戏运行更顺畅。

这是运动的代码:

public void Update(GameTime gametime, Player player, KeyboardState keyboard, Rectangle mainFrame)
{
    if (keyboard.IsKeyDown(Keys.Left) || keyboard.IsKeyDown(Keys.A))
    {
        player.fakePosition.X -= 1;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                board[i, j].X += board[i, j].speed;
    }

    if (keyboard.IsKeyDown(Keys.Right) || keyboard.IsKeyDown(Keys.D))
    {
        player.fakePosition.X += 1;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                board[i, j].X -= board[i, j].speed;
    }

    if (keyboard.IsKeyDown(Keys.Up) || keyboard.IsKeyDown(Keys.W))
    {
        player.fakePosition.Y -= 1;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                board[i, j].Y += board[i, j].speed;
    }

    if (keyboard.IsKeyDown(Keys.Down) || keyboard.IsKeyDown(Keys.S))
    {
        player.fakePosition.Y += 1;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                board[i, j].Y -= board[i, j].speed;
    }

    for (int i = 0; i < 9; i++)
        for (int j = 0; j < 9; j++)
            if (board[i, j].visibleBox.Intersects(mainFrame))
                board[i, j].Visible = true;
}

从我注意到的情况来看,平局越高(列表越远(因为我在开始时将它们全部绘制在彼此之上以进行测试)移动得越快。但它们都应该在相同的速度(等于 5)

如果您有任何问题,请告诉我!

4

1 回答 1

0

这些 .speed 都一样吗?我不确定这是否有帮助,但如果这些板一直彼此相对静止,也许您可​​以将所有板放在“根”下,并且每个板都保持与“根”的相对位置。然后你可以通过改变'root'的位置来移动世界,通过root.position + board[i,j].position得到一个棋盘的绝对位置。祝你好运。

于 2014-01-15T10:06:41.693 回答