Java游戏开发:按行和列划分精灵表?

时间:2012-01-12 00:41:53

标签: java arrays math multidimensional-array

我试图通过给出框架宽度,高度,行,列和frameCount来弄清楚如何获得动画精灵表框架的X和Y坐标。然后我希望它给我一个frameNumber的框架所在的行和列号。 (从上到下从右到左计数)

我意识到我可以通过执行int[][]来获取列号(如果我认为行和列由frameNumber % rows表示)但是我很难理解如何获取行数。有什么想法吗?

2 个答案:

答案 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