移动不同速度XNA的背景

时间:2014-01-15 05:35:15

标签: c# visual-studio xna background-image pacman

这太奇了,我不能为我的生活搞清楚。

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

我的问题是,当我生成地图,然后让地图移动而不是播放器(将播放器保持在屏幕的中心时,地图的peices以不同的速度移动。我有一个数组( 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)移动

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

1 个答案:

答案 0 :(得分:0)

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