如何使用Spritebatch.Draw绘制RectangleF?

时间:2018-12-31 00:30:21

标签: c# xna monogame system.drawing spritebatch

我正在尝试创建一个自上而下的游戏,可以在8个方向上移动。我已经实现了Vector2以便以规范的方式移动。我使用spritebatch系统绘制标准矩形(源矩形和目标矩形),但很快更改为RectangleF,因为常规矩形使用整数。

Spritebatch无法识别RectangleF,因此返回错误“无法从'System.Drawing.RectangleF'转换为'Microsoft.Xna.Framework.Vector2'?”。 Color还返回模糊的内容,无论是“ System.Drawing”还是“ Microsoft.Xna.Framework.Color”,它始终返回无法将其转换为“ Microsoft.Xna.Framework.Rectangle”的方式。

在此代码中,调用Vector2(位置),并用于绘制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();
    }

我对应该如何解决此问题感到困惑,是否可以通过SpriteBatch绘制RectangleF,还是必须查看另一种方法?

谢谢。

1 个答案:

答案 0 :(得分:0)

绝对没有理由使用RectangleF。 通常,您在游戏中使用基于像素的坐标系,因此Rectangle Class是您想要的。

除此之外,这是将玩家位置存储在Vector2中并使用适当的重载的更好方法:

SpriteBatch.Draw (Texture2D, Vector2, Color)