无法使用简化的Draw方法翻转精灵

时间:2018-10-14 08:48:35

标签: c# graphics sprite monogame

我正在做一个游戏,其中我从子图形表中绘制子图形。我的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,则精灵将从屏幕上消失。我不知道为什么会这样。我敢肯定这很简单,所以希望有些好人可以向我指出正确的方向!

谢谢!

1 个答案:

答案 0 :(得分:0)

我通过使用不同的Draw重载找到了解决问题的方法:

Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);