Как бы вы нарисовали RectangleF с помощью Spritebatch.Draw?
Я пытаюсь создать игру сверху вниз, в которой вы можете двигаться в 8 направлениях. Я реализовал Vector2 для того, чтобы двигаться в нормализованном порядке. Я использую систему spritebatch для рисования стандартными прямоугольниками (исходный и конечный), но вскоре изменился на RectangleF, так как обычные прямоугольники используют целые числа.
Spritebatch не распознает RectangleF и, следовательно, возвращает ошибку "Не удается преобразовать из" System.Drawing.RectangleF "в" 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 ответ
Нет абсолютно никаких причин использовать RectangleF. Обычно вы используете в своей игре систему координат на основе пикселей, и поэтому вам нужен Rectangle Class.
Кроме этого, лучше хранить данные игроков в Vector2 и использовать соответствующую перегрузку:
SpriteBatch.Draw (Texture2D, Vector2, Color)