Если вы знаете ширину и высоту кадров, сколько кадров в строке существуют, и какой кадр вы хотите, чем получать координаты х и у достаточно прост:
frameX = ((frameNumber - 1) % columns) * frameWidth;
frameY = ((frameNumber - 1)/columns) * frameHeight;
Обратите внимание, что «/» операция должна быть INT, короткие или байт деление, как вам нужно остаток быть закруглены, чтобы получить 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
Я думал об этом, но я не был уверен, выполняет ли операция Math.floor округление до ближайшего полного целого числа, даже если число ближе к следующему наибольшему числу? Как и 1.99999, оказывается 1? –
Да, это всегда полы. вот почему вам это нужно в этом случае. (фактически только в/не в модуле) – Niko