精灵动画 - 纹理中的帧访问

时间:2011-12-14 19:02:01

标签: sprite frames

我有一个相对简单的问题,这让我陷入困境。

问题: 我需要一个算法来计算精灵表上帧的坐标。

我的纹理可以是128x128或256x256或512x512(像素)。这些可以有32或64帧。当加载纹理我告诉我的游戏帧的大小,因此我可以将帧大小除以纹理宽度/高度,并得到我的行数和列数。如果需要,我可以将它们相乘以找到纹理中的总帧数。

实施例: 我有一个256x256的纹理,框架为64.给我四行四列。我需要将第12帧绘制到屏幕上,这样我的程序必须在纹理上找到网格坐标,(0,3)。

我希望这张图片澄清了我的意思:

http://i.stack.imgur.com/sF6GJ.png

令我烦恼的是算法应该是多么简单,但我想这就是让我找不到正确答案的东西,任何帮助都会受到极大的关注。

1 个答案:

答案 0 :(得分:1)

你已经拥有了精灵表的大小(128 * 128,256 * 256或512 * 512),你也有每帧的大小,64 * 64表示。

然后你可以通过将帧数乘以帧宽来获得帧原点的值,然后将结果除以纹理宽度。除法的结果是行,余数是原点的x。然后简单地将行乘以帧的高度以获得帧原点的y。

例如。帧大小为64 * 64,精灵表为256 * 256。假设我们得到第7帧。

frameNo*frameSize.width = 448.
row = 448/spritesheet.width = 448/256 = 1
origin.y = column*frame.height = 1*64 = 64.
origin.x = 448 % 256 = 192

所以起源是(192,64)。