嘿,我目前正在制作2D战斗机,就像使用XNA 4.0的老式真人快打一样。无论如何,我正在尝试编写一个打孔动画。
播放器处于空闲状态,按下左控制,播放器应该打卡。
现在假设播放器面向屏幕左侧。我所有的精灵都是面向右边的。因此,当玩家拳打时,精灵会被翻转并绘制。
问题是,动画使得它看起来像玩家突然向右传送,因为它将翻转的打孔框架的最左边部分与他的空闲框架的最左边部分对齐(这至少是我的想法)。我似乎无法想办法解决这个问题。
我的代码现在非常大。如果有人能够确定问题的可能部分,我很乐意发布该代码。
答案 0 :(得分:1)
如果我做对了,你可以使用这个重载来绘制:
SpriteBatch.Draw (Texture2D, Rectangle, Nullable<Rectangle>, Color, Single, Vector2, SpriteEffects, Single)
从msdn:使用指定的纹理,目标矩形,源矩形,颜色,旋转,原点,效果和图层,将精灵添加到一批精灵中进行渲染。
因此,您可以将精灵的原点作为其中心传递,并且它将围绕中心旋转。只需找到旋转的最佳原点。
答案 1 :(得分:0)
好的,所以我解决了这个问题。确实问题是精灵表。设计它的人并没有将每个图像放在每个帧的中心。
那么,他将所有图像都集中在一起,但框架的大小各不相同。但是这个问题仍然存在。
经过一些调试后,我弄清楚发生了什么。在空闲帧中,这些帧中角色两侧有一个2像素的空间。在Punch帧中,这些帧中角色两侧有一个23像素的空间。
我的Draw()
功能是根据2D位置矢量绘制每个帧。此位置Vector指定每个帧的左上角。
现在由于空闲帧和Punch帧在每个帧中的字符左边有不同的像素宽度,当玩家按下Punch时,它看起来像是“传送”的字符。
现在我解决这个问题 - 让所有的帧大小都一样!这解决了我的“远程传送”问题。我无法找出解决这个问题的替代方法。
现在有一件事我不明白。有很多游戏,精灵表由不同的帧大小组成。如果没有这个传送问题,他们如何使用它们?!