2D камера XNA 4.0 делает рывок спрайта - PullRequest
1 голос
/ 11 ноября 2011

Хорошо, вот в чем проблема, я нашел хорошую рабочую 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;
            }
        }
    }

1 Ответ

1 голос
/ 12 ноября 2011

Благодаря помощи, предоставленной на http://xnachat.com/, я смог быстро решить проблему.

Как:

Я передал камеру в плеер, вместо того, чтобы задавать положение камеры снова и снова, я просто добавил измененный вектор в положение камеры.

...