我试图通过给出框架宽度,高度,行,列和frameCount来弄清楚如何获得动画精灵表框架的X和Y坐标。然后我希望它给我一个frameNumber的框架所在的行和列号。 (从上到下从右到左计数)
我意识到我可以通过执行int[][]
来获取列号(如果我认为行和列由frameNumber % rows
表示)但是我很难理解如何获取行数。有什么想法吗?
答案 0 :(得分:4)
如果您有cols列,则只需使用:
使用:
row = Math.floor(frameNumber / cols);
col = frameNumber % cols;
所以,如果您有1000个cols并且想要帧号3989,它会给你:
row = 3; col = 989;
答案 1 :(得分:1)
如果您知道帧的宽度和高度,每行有多少帧,以及您想要哪个帧,那么获取x和y坐标非常简单:
frameX = ((frameNumber - 1) % columns) * frameWidth;
frameY = ((frameNumber - 1) / columns) * frameHeight;
请注意,'/'操作必须是 int , short 或 byte 除法,因为您需要对其余部分进行舍入off来获取帧的开始的X和Y坐标,而不是中间的某个位置。
这些公式适用于精灵表格,其中框架从左到右,然后从上到下。如果您想要反过来,只需切换'%'和'/'运算符,并将'columns'更改为'rows':
frameX = ((frameNumber - 1) / rows) * frameWidth;
frameY = ((frameNumber - 1) % rows) * frameHeight;
这也假设你将从1开始引用你的帧,但如果你从0开始索引它们,那么可以删除' - 1'部分:
frameX = (frameNumber % columns) * frameWidth;
frameY = (frameNumber / columns) * frameHeight;
//assuming that frameNumber indexes from 0;
此外,如果您只想知道帧所在的列或行,那么只需删除'* frameWidth'和'* frameHeight'部分,它们将返回从0开始的行和列索引:
frameX = (frameNumber - 1) % columns;
frameY = (frameNumber - 1) / columns;
希望这有帮助。
Zistack