Вычисление индекса в массиве поможет с алгоритмом - PullRequest
1 голос
/ 21 июня 2011

Я беру лист спрайта и разделяю его на массив.Затем я беру этот массив и поворачиваю изображение с определенной степенью детализации и помещаю его также в конец массива, чтобы предварительно испечь вращения для более быстрого рисования (без аппаратного ускорения).Конечный результат выглядит примерно так:

array[0] = frame1 of the animation
array[1] = frame2 of the animation
array[2] = frame3 of the animation
array[3] = frame1 of the animation rotated at 45 degrees
array[4] = frame2 of the animation rotated at 45 degrees
array[5] = frame3 of the animation rotated at 45 degrees
array[6] = frame1 of the animation rotated at 90 degrees
... etc

Так что теперь я пытаюсь придумать функцию, которая будет возвращать правильный элемент для любого угла с правильной гранулярностью.Например, скажем, мой игровой объект в настоящее время повернут на 30 градусов и находится в кадре 1 анимации, я бы хотел массив [3].Если бы я был на frame2 анимации, я бы хотел массив [4].Если бы объект был повернут на 80 градусов и находился в кадре 1, я бы хотел массив [6] и т. Д.

Вот мои константы: Количество кадров анимации (до вращения) Число изкадры анимации (пост-ротация). Гранулярность поворотов (от 1 до 360, т. е. выше будет гранулярность 45).

Это сигнатура функции для вычисления кадра: function calculateImageIndex(animationFrame : Number, currentAngle : Number) : Number

Есть идеи как рассчитать это?Я в тупике.

Ответы [ 2 ]

3 голосов
/ 21 июня 2011
nf: total number of frames
gr: granularity of rotation
r: actual angle of rotation
f: actual frame number

i = round(r / gr) * nf + f - 1
0 голосов
/ 24 июня 2011

n = количество кадров (предварительное вращение) g = степень детализации вращения r = фактический угол поворота f = фактический кадр

Я думаю, что эти константы вам нужны и даны.

Первое, что мы хотим сделать, это найти число поворотов, которое потребуется для достижения желаемого угла.В приведенном выше примере угол наклона 45 будет равен 1 повороту.90 градусов = 2 поворота и так далее.Пусть R = количество оборотов.

R = r / g Это всегда должно быть целое число, так как вам никогда не нужен угол, который не соответствует использованным вами чаевым.

Далее мы будемрассчитать начальный индекс этой ротации "группа".В приведенном выше примере первая группа с вращением 0 начинается с индекса 0. 45 градусов или 1 вращение начинается с индекса 3. И так далее.Для этого нам нужно умножить количество поворотов (R) на количество кадров перед вращением (n).Пусть j = начальный индекс этой группы вращения.j = R * n

Последний шаг - выяснить, сколько вы должны добавить к начальному индексу (j), чтобы достичь нужного кадра.Я предполагаю, что первый кадр будет иметь номер 1, как в примере выше, но если первый кадр будет иметь номер 0, тогда уберите -1 в алгоритме.Пусть я = окончательный индекс.i = j + (f - 1)

Я буду индексом, который вы ищете.Чтобы сложить это в один алгоритм, это выглядело бы так:

i = ((r / g) * n) + (f - 1)

Надеюсь, это поможет!Дайте мне знать, если вам нужно, чтобы я что-то прояснил.

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