2d камера не следит за спрайтом правильно - PullRequest
0 голосов
/ 27 октября 2010

Мне нужна помощь с камерой после спрайта.У меня есть класс камеры, который не следует за спрайтом должным образом.У меня класс камеры

camera cam;
cam.position = sprite.position;

этот фрагмент кода не выполняется должным образом.каждый раз, когда я запускаю этот код, он сбрасывает мой спрайт, как если бы он был в позиции (0,0), а затем следует за моим спрайтом.Вот видео пример того, о чем я говорю.
Позиция моего спрайта в (60,515).

class Camera2d
{
    public float _zoom;
    public Matrix _transform;
    public Vector2 _position;
    protected float _rotation;

    public Camera2d()
    {
        _zoom = 1.0f;
        _rotation = 0.0f;
        _position = Vector2.Zero;
    }
    //public float Zoom {  }
    //public float Rotation {  }
    public void Move(Vector2 amount)
    {
        _position += amount;
    }
    public Vector2 CPos
    {
        get { return _position; }
        set { _position = value; }
    }
    public Matrix get_tranformation(GraphicsDevice graphicsDevice)
    {
        _transform = Matrix.CreateTranslation(new Vector3(-_position.X, -_position.Y, 0));

        return _transform;
    }
}

1 Ответ

0 голосов
/ 28 октября 2010

Вы смотрите на проблему смещения спрайта.Разница между позицией вашего спрайта и позицией вашей камеры - ничто.Поэтому ваш спрайт будет всегда отображаться в {0, 0}.

Если вы сместите положение вашей камеры на половину высоты и ширины вида, то оно появится в центре вашего спрайта.

cam.position = sprite.position;
cam.position.x -= cam.width / 2;
cam.position.y -= cam.height / 2;
...