2014-01-15 2 views
0

Это так странно, и я не могу для жизни понять это.Фоновая движущаяся разная скорость XNA

Я работаю над странным клоном 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)

Если у вас есть какие-либо вопросы, дайте мне знать!

+0

Вы устанавливаете то же значение '.speed' для всех частей платы? –

+0

@ Joe да, его набор как общедоступный переменный для облегчения доступа (cz im lazy) в классе Piece. Его набор равен 5 по конструкции и никогда не был изменен после этого. – Nick

ответ

0

Являются ли эти .speed все одинаковыми? Я не уверен, может ли это помочь, но если платы постоянно статичны друг к другу, возможно, вы можете поместить все платы под «корень», и каждая доска удерживает относительное положение «root». Затем вы можете переместить мир, изменив положение «корень» и получить абсолютное положение доски с помощью root.position + board [i, j] .position. Удачи.

+0

Да, значение скорости - это помощь в классе Piece. Этот класс также занимает позицию. Моя проблема заключается в том, что, когда я устанавливаю их для рисования на (0, 0) (поочередно), они перемещаются с разной скоростью (быстрее, чем позже она была нарисована (ближе всего к верхней части экрана), и это еще хуже когда я пытаюсь нарисовать карту, как это должно быть. – Nick

Смежные вопросы