Как бы вы нарисовали RectangleF с помощью Spritebatch.Draw? - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь создать игру сверху вниз, в которой вы можете двигаться в 8 направлениях.Я реализовал Vector2 для того, чтобы двигаться в нормализованном порядке.Я использую систему spritebatch для рисования стандартными прямоугольниками (исходный и конечный), но вскоре изменился на RectangleF, так как обычные прямоугольники используют целые числа.

Spritebatch не распознает RectangleF и, следовательно, возвращает ошибку: «Не удается преобразовать из»System.Drawing.RectangleF 'to' Microsoft.Xna.Framework.Vector2 '? ".Цвет также возвращает неоднозначное значение, независимо от значения «System.Drawing» или «Microsoft.Xna.Framework.Color», он всегда возвращает способ его преобразования в «Microsoft.Xna.Framework.Rectangle».

Вэтот код вызывается Vector2 (Position) и используется для рисования позиции RectangleF.Затем я использую Spritebatch.Draw, чтобы нарисовать текстуру с источником и назначением, и она всегда обновляется, чтобы дать представление о движущемся персонаже.

public static RectangleF destinationRectangle, sourceRectangle;

public void Draw(SpriteBatch spriteBatch)   
    {
        int width = 64;
        int height = 64;
        realPositionX = PlayerMovement.Position.X; 
        realPositionY = PlayerMovement.Position.Y;

        sourceRectangle = new RectangleF(currentFrame * width, row * height, width, height);
        destinationRectangle = new RectangleF(realPositionX, realPositionY, width, height);
        spriteBatch.Begin();
        spriteBatch.Draw(Player, destinationRectangle, sourceRectangle, Microsoft.Xna.Framework.Color.White); //Error Occurs Here
        spriteBatch.End();
    }

Я не совсем понимаю, как мне следует подойти к этой проблемеЕсть ли способ рисования RectangleF через SpriteBatch или я должен смотреть на другой метод?

Спасибо.

1 Ответ

0 голосов
/ 02 января 2019

Нет абсолютно никаких причин использовать RectangleF.Обычно вы используете пиксельную систему координат в своей игре, и поэтому вам нужен класс Rectangle.

Кроме этого, лучше всего сохранить положение игроков в Vector2 и использоватьсоответствующая перегрузка:

SpriteBatch.Draw (Texture2D, Vector2, Color)
...