Java游戏开发人员:按行和列排列的精灵表框架?

Java游戏开发人员:按行和列排列的精灵表框架?,java,arrays,math,multidimensional-array,Java,Arrays,Math,Multidimensional Array,我正在尝试通过给定帧宽度、高度、行数、列数和帧数,来了解如何获得动画精灵表的帧的X和Y坐标。然后我想让它给我一个给定的帧号,返回帧所在的行和列号。(从上到下从右到左计数) 我意识到我可以得到列号(如果我认为行和列要用 int [][]/COD>)表示,只需执行 FrimeNoS%行,但我对如何获得行号感到困惑。有什么想法吗?如果你有cols专栏,你可以简单地使用: 使用: 因此,如果您有1000个COL,并且想要帧号3989,它将为您提供: 行=3; col=989 如果您知道帧的宽度和高度、每

我正在尝试通过给定帧宽度、高度、行数、列数和帧数,来了解如何获得动画精灵表的帧的X和Y坐标。然后我想让它给我一个给定的帧号,返回帧所在的行和列号。(从上到下从右到左计数)


我意识到我可以得到列号(如果我认为行和列要用<代码> int [][]/COD>)表示,只需执行<代码> FrimeNoS%行,但我对如何获得行号感到困惑。有什么想法吗?

如果你有cols专栏,你可以简单地使用:

使用:

因此,如果您有1000个COL,并且想要帧号3989,它将为您提供:

行=3;
col=989

如果您知道帧的宽度和高度、每行有多少帧以及需要哪一帧,那么获得x和y坐标就相当简单:

    frameX = ((frameNumber - 1) % columns) * frameWidth;

    frameY = ((frameNumber - 1) / columns) * frameHeight;

注意,'/'操作必须是<强> int ,<强>短,或<强> Byth除法,因为你需要余数四舍五入,以获得框架开头的x和y坐标,而不是中间的某个地方。 这些公式适用于框架从左到右,然后从上到下的精灵图纸。如果您希望使用另一种方法,而不仅仅是切换“%”和“/”运算符,并将“列”更改为“行”:

    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

我认为查找frameY的部分不正确,我只是以一个十进制结束。正如我所说,它必须是一个int、byte或long除法,因此十进制被截断。如果您仍然有问题,请将整个表达式转换回上述类型中的一种。抱歉,但我认为这个答案令人困惑,因此我必须对其进行向下投票。我考虑过这个问题,但我不确定,Math.floor操作是否会向下舍入到最接近的整数,即使该数字更接近下一个最大整数?比如说1.99999就是1?是的,它总是1。这就是为什么在这种情况下你需要它。(实际上仅在模中/不在模中)
    frameX = (frameNumber - 1) % columns;

    frameY = (frameNumber - 1) / columns;