Хорошо, вот в чем проблема, я нашел хорошую рабочую 2D-камеру из:
http://www.david -amador.com / 2009/10 / XNA-камера-2d-с-зум-и-вращение /
Итак, теперь я внедрил его в свою 2D-шутер сверху вниз, и он прекрасно работает. Когда у меня позиция камеры равна позиции игрока, она отлично работает; по мере. Теперь, когда у меня есть позиция камеры = позиция игрока, она немного дергается:
http://www.youtube.com/watch?v=mh4Tx9xg324
Как вы можете видеть, спрайт уходит, а затем возвращается немного назад. Я приведу грубый пример:
Если позиция игрока (100, 100), я двигаюсь вправо, и она переходит к (120, 100). Теперь все цифры в порядке, это визуализация. Визуализация выглядит так:
(100, 100) -> (130, 100) -> (120, 100)
Я понятия не имею, почему он делает это, и это заставляет меня думать, что это все, над чем я работаю, чтобы исправить. Теперь, когда у меня камера центрирована на точке (1000, 1000), игрок не дергается как таковой. Так что все это указывает прямо на класс Camera2D.
Во всяком случае, если кто-то может помочь, это будет с благодарностью!
** РЕДАКТИРОВАТЬ **
Код движения:
//Update Movement for user controlled sprites
//A bit rough around the edges at the moment...
public void UpdateMovement(Input input) {
//Get ready to point sprite at mouse location in relation to the center of the screen
MouseState mouse = Mouse.GetState();
mouseLoc = new Vector2(mouse.X, mouse.Y);
direction = new Vector2(512, 300) - mouseLoc;
angle = (float)((Math.Atan2(-direction.Y, -direction.X)));
m_Rotation = angle;
//End angle information
//reset the changed vector 2 back to zero
changed = Vector2.Zero;
//checkCollision(vector2)
//it gets the estimated new point and if it doesnt hit a wall
//it sets to the new point.
if (input.CurrentKeyboardState.IsKeyDown(Keys.A)) {
changed.X = -m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
if (input.CurrentKeyboardState.IsKeyDown(Keys.D)) {
changed.X = m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
if (input.CurrentKeyboardState.IsKeyDown(Keys.W)) {
changed.Y = -m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
if (input.CurrentKeyboardState.IsKeyDown(Keys.S)) {
changed.Y = m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
}