是否有更好的方法加载大型动画?

时间:2009-06-12 17:04:00

标签: c++ user-interface sdl sdl-image

也许不是很大,但是一百帧或者其他东西。是通过制作数组并单独加载每个图像来加载它的唯一方法吗?

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 个答案:

答案 0 :(得分:1)

可以使用实用程序函数简化加载,该函数为循环的每次迭代构建文件名:

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

答案 1 :(得分:1)

一种常见的技术是spritesheets,其中单个大图像被划分为单元格网格,每个单元格包含一帧动画。通常,任何游戏实体的所有动画帧都放在单个(有时是巨大的)精灵表上。

答案 2 :(得分:1)

不是作为网格加载,而是将所有帧堆叠在一个垂直条带中(相同的图像)。然后,您只需要知道每帧有多少行,并且可以设置指向帧行偏移的指针。你最终仍然有连续的扫描线,可以直接显示或平凡地咀嚼成单独的图像。