Есть ли лучший способ загрузить большую анимацию?
-
13-09-2019 - |
Вопрос
Может быть, не очень большой, но кадров сто, что ли.Единственный способ загрузить его, создав массив и загрузив каждое изображение отдельно?
load_image() — это созданная мной функция, которая загружает изображения и преобразует их BPP.
expl[0] = load_image( "explode1.gif" );
expl[1] = load_image( "explode2.gif" );
expl[2] = load_image( "explode3.gif" );
expl[3] = load_image( "explode4.gif" );
...
expl[99] = load_image( "explode100.gif" );
Кажется, их путь должен быть лучше..по крайней мере, я надеюсь.
Решение
Распространенным методом являются спрайт-таблицы, в которых одно большое изображение разделено на сетку ячеек, каждая из которых содержит один кадр анимации.Часто все кадры анимации любого игрового объекта размещаются на одном, иногда огромном листе спрайтов.
Другие советы
возможно, упростите загрузку с помощью служебной функции, которая создает имя файла для каждой итерации цикла:
LoadAnimation(char* isFileBase, int numFrames)
{
char szFileName[255];
for(int i = 0; i < numFrames; i++)
{
// append the frame number and .gif to the file base to get the filename
sprintf(szFileName, "%s%d.gif", isFileBase, i);
expl[i] = load_image(szFileName);
}
}
Вместо загрузки в виде сетки сложите все кадры в одну вертикальную полосу (то же изображение).Тогда вам нужно только знать, сколько строк в кадре, и вы можете установить указатель на смещение строки кадра.В конечном итоге у вас по-прежнему остаются смежные линии сканирования, которые можно отображать напрямую или тривиально разрезать на отдельные изображения.