我正在做一个游戏,其中我从子图形表中绘制子图形。我的Sprite类具有一个名为spriteDirection的整数属性,当该属性等于+1时,该精灵朝右,而当其等于-1时,该子精灵向左翻转。我一直在成功使用此Draw方法:
public void Draw(SpriteBatch spriteBatch)
{
if (draw)
{
int drawX = (int)(spritePosition.X - spriteOffset.X);
int drawY = (int)(spritePosition.Y - spriteOffset.Y);
if (texture != null)
{
spriteBatch.Draw(texture, new Rectangle(drawX, drawY, frameWidth, frameHeight), rSpriteSourceRectangle, Color.White);
}
}
}
rSpriteSourceRectangle的计算如下:
private Rectangle rSpriteSourceRectangle
{
get
{
if (spriteDirection == -1)
{
return new Rectangle(frameOffsetX + (frameWidth * (currentFrame + 1)), frameOffsetY, -frameWidth, frameHeight);
}
else
{
return new Rectangle(frameOffsetX + (frameWidth * currentFrame), frameOffsetY, frameWidth, frameHeight);
}
}
}
一切正常。但是我希望能够切换到使用此新的Draw方法:
public void Draw(SpriteBatch spriteBatch)
{
if (draw)
{
Vector2 positionDraw = spritePosition - spriteOffset;
if (texture != null)
{
spriteBatch.Draw(texture, positionDraw, rSpriteSourceRectangle, Color.White);
}
}
}
这可以工作,只要我的spriteDirection属性等于1(因此sprite朝右)。如果我使它等于-1,则精灵将从屏幕上消失。我不知道为什么会这样。我敢肯定这很简单,所以希望有些好人可以向我指出正确的方向!
谢谢!
答案 0 :(得分:0)
我通过使用不同的Draw重载找到了解决问题的方法:
Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);