如何在C#中翻转精灵

7
我正在制作一个基于XNA游戏开发教程“射手”的小游戏......经过一番试错,我做出了自己的动画精灵,可以在屏幕上移动。问题是,他总是面向右边。
每次按键事件发生时,我该如何改变这个(下图)?!
我对C#还比较陌生,我意识到这可能比我想象的要复杂,所以我只需要知道如何使精灵在向右移动时面向右边,在向左移动时面向左边。 image 提前致谢。

2
永远不要把你的函数命名为像IDFK这样的东西。这将会是维护的噩梦。 - Dhaivat Pandya
1
@Dhaivat Pandya:我很确定那只是为了表达观点,即“我不F@#$ing知道”。 - Ed S.
那只是一个占位符,用于更改玩家方向的工作事件... 这个文档中没有名为IDFK的内容。 - Zanrkvil
3个回答

7

您也可以通过在SpriteBatch.Draw()方法中传递SpriteEffects.FlipHorizontally选项来实现此操作。但是,正如其他人所说,这比使用精灵表会有更多的开销。


2
通常,一个精灵表包含每个方向的图像。尽管可以在运行时翻转图像,但这会增加不必要的图像处理。我建议您事先创建一个包含每个动画的精灵表,并在运行时确定要显示的帧。 这里有一个简单的精灵表示例

精灵表是一个不错的选择,每个方向一个单元格。 - rboarman
那么,我该如何更改播放哪些帧以及何时播放它们? - Zanrkvil
@Jay Riggs:哈哈,是的,我找到了另一个。 - Ed S.
@Zanrkvil:你可以创建一个简单的函数来确定应该显示哪个帧。例如,如果角色面向右侧,你就知道必须从第三行中获取一个帧(根据我的示例图像)。 - Ed S.

0
SpriteEffects s = SpriteEffects.FlipHorizontally;
int smX = 200; //smx is the 'x' coordinates.

    public void runChar()
    {
        if (Keyboard.GetState().IsKeyDown(Keys.Left))
        {
            smX -= 2;
            s = SpriteEffects.FlipHorizontally;
            //oposite direction.
        }
        else if (Keyboard.GetState().IsKeyDown(Keys.Right))
        {
            smX += 2;
            s = SpriteEffects.None;
            //original direction.
        }
    }

spriteBatch.Draw(sM, new Rectangle(smX, 200, 100, 100), null, Color.White, rotation, new Vector2(50, 50), s, 0f);

这将左右翻转纹理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接