无法使用简化的 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);