これはとても奇妙で、私の人生ではそれを理解することはできません.
私は奇妙な 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 に等しい)
ご不明な点がございましたら、お気軽にお問い合わせください。