Java Game Dev: Спрайт лист кадр за строкой и столбцом? - PullRequest
3 голосов
/ 12 января 2012

Я пытаюсь выяснить, как получить координаты X и Y для фреймов анимированного листа спрайта, задав для него ширину фрейма, высоту, строки, столбцы и frameCount. Затем я хочу, чтобы он вернул мне номер строки и столбца, в котором находится кадр, с учетом номера кадра. (считая сверху вниз справа налево)

Я понял, что могу получить номер столбца (если я считаю, что строки и столбцы представлены int[][]), просто набрав frameNumber % rows, но я озадачен тем, как получить номер строки. Есть идеи?

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Если у вас есть столбцы cols, вы можете просто использовать:

Использование:

row = Math.floor(frameNumber / cols);
col = frameNumber % cols;

, поэтому, если у вас есть 1000 столбцов и вы хотите номер кадра 3989, это даст вам:

строка = 3; col = 989;

1 голос
/ 12 января 2012

Если вы знаете ширину и высоту фреймов, сколько фреймов в строке и какой фрейм вы хотите, то получить координаты x и y довольно просто:

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

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

Обратите внимание, что операция '/' должна быть делением int , short или byte , так как вам нужно округлить остаток, чтобы получить координаты 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...