Не удается перевернуть спрайт с помощью упрощенного метода Draw - PullRequest
0 голосов
/ 14 октября 2018

Я делаю игру, в которой я рисую спрайты из листа спрайтов.Мой класс 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 (поэтому спрайт направлен вправо).Если я сделаю его равным -1, спрайт исчезнет с экрана.Я не могу понять, почему это происходит.Я уверен, что это что-то простое, поэтому, надеюсь, какой-нибудь приятный человек может направить меня в правильном направлении!

Спасибо!

1 Ответ

0 голосов
/ 14 октября 2018

Я нашел способ обойти проблему, используя другую перегрузку Draw:

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