0

嘿,我目前正在制作一个 2D 战斗机,很像使用 XNA 4.0 的老式真人快打。无论如何,我目前正在尝试编写打孔动画。

玩家处于空闲状态,按下左键时,玩家应该出拳。

现在假设玩家面向屏幕的左侧。我所有的精灵都面向右侧绘制。所以当玩家出拳时,精灵会被翻转和绘制。

问题是,动画让它看起来像是玩家突然向右传送,因为它将翻转的打孔帧的最左边部分与他空闲帧的最左边部分对齐(至少我是这么认为的)。我似乎想不出办法来解决这个问题。

我的代码现在很大。如果有人可以确定问题的可能部分,我很乐意发布该代码。

4

2 回答 2

1

如果我做对了,你可以使用这个重载来绘制:

SpriteBatch.Draw (Texture2D, Rectangle, Nullable<Rectangle>, Color, Single, Vector2, SpriteEffects, Single) 

来自 msdn:使用指定的纹理、目标矩形、源矩形、颜色、旋转、原点、效果和图层将一个精灵添加到一批精灵中进行渲染。

因此,您可以将精灵的原点作为其中心,例如,它将围绕中心旋转。只需找到旋转的最佳原点即可。

于 2012-05-09T00:25:46.933 回答
0

好的,所以我解决了这个问题。确实问题出在精灵表上。设计它的人并没有在每一帧中将每个图像居中。

因此,他将所有图像居中,但帧的大小不同。但这个问题依然存在。

经过一些调试,我弄清楚发生了什么。在空闲帧中,这些帧中角色的两侧都有一个 2 像素的空间。在 Punch 帧中,在这些帧中角色的两侧都有一个 23 像素的空间。

我的Draw()功能是根据 2D 位置向量绘制每一帧。这个位置向量,指定每一帧的左上角。

现在,由于 Idle 帧和 Punch 帧在每帧中角色左侧的像素宽度不同,因此当玩家按下 Punch 时,角色看起来像是“传送”了。

现在我对这个问题的解决方案 - 使所有框架尺寸相同!这解决了我的“传送”问题。不过,我想不出任何替代解决方案来解决这个问题。

现在有一件事我不明白。有很多游戏的精灵表由不同的帧大小组成。他们如何在没有传送问题的情况下使用它们?!

于 2012-05-24T14:12:58.263 回答