无法使用简化的 Draw 方法翻转精灵
Failing to flip sprite with simplified Draw method
我正在制作一个游戏,我在其中从一个精灵中绘制精灵 sheet。我的 Sprite class 有一个名为 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(因此精灵面朝右),这会起作用。如果我让它等于-1,精灵就会从屏幕上消失。我不知道为什么会这样。我敢肯定这很简单,所以希望有好心人能为我指明正确的方向!
谢谢!
我已经通过使用不同的 Draw 重载找到了解决该问题的方法:
Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);
我正在制作一个游戏,我在其中从一个精灵中绘制精灵 sheet。我的 Sprite class 有一个名为 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(因此精灵面朝右),这会起作用。如果我让它等于-1,精灵就会从屏幕上消失。我不知道为什么会这样。我敢肯定这很简单,所以希望有好心人能为我指明正确的方向!
谢谢!
我已经通过使用不同的 Draw 重载找到了解决该问题的方法:
Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);