Есть ли лучший способ загрузить большую анимацию?

Может быть, не очень большой, но сто кадров или что-то. Это единственный способ загрузить его, создав массив и загрузив каждое изображение отдельно?

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" );

Похоже, их должно быть лучше... по крайней мере, я надеюсь.

3 ответа

Решение

Обычный метод - это спрайт-листы, в которых одно большое изображение делится на сетку ячеек, каждая ячейка содержит один кадр анимации. Часто все кадры анимации для любого игрового объекта размещаются на одном, иногда огромном, листе спрайтов.

Может быть, упростить загрузку с помощью служебной функции, которая создает имя файла для каждой итерации цикла:

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);
    }
}

Вместо загрузки в виде сетки, сложите все кадры в одну вертикальную полосу (одно и то же изображение). Тогда вам нужно только знать, сколько строк в кадре, и вы можете установить указатель на смещение строки кадра. В итоге у вас все еще остаются непрерывные линии сканирования, которые можно отображать напрямую или тривиально разжевывать в отдельные изображения.

Другие вопросы по тегам