我的c ++程序(使用Allegro库的游戏)需要在启动时加载一些文件(图片+字体)。在我的程序实际进入运行状态之前,需要几秒钟(大约2秒)才能加载。正在加载文件:
gamePic[0] = al_load_bitmap("Data/pic01.jpg");
gamePic[1] = al_load_bitmap("Data/pic02.jpg");
gamePic[2] = al_load_bitmap("Data/pic03.jpg");
gamePic[3] = al_load_bitmap("Data/pic04.jpg");
gamePic[4] = al_load_bitmap("Data/pic05.jpg");
gamePic[5] = al_load_bitmap("Data/pic06.jpg");
gamePic[6] = al_load_bitmap("Data/pic07.jpg");
gamePic[7] = al_load_bitmap("Data/pic08.jpg");
gamePic[8] = al_load_bitmap("Data/pic09.jpg");
gamePic[9] = al_load_bitmap("Data/pic10.jpg");
gamePic[10] = al_load_bitmap("Data/pic11.jpg");
我应该应用什么机制,以便我可以运行另一个动画来显示"正在加载文件......"?
答案 0 :(得分:2)
1)找出哪个UI框架最适合您的应用程序/环境,一些示例包括Qt,MFC或(可能只需一个简单的窗口和进度条控件)普通的win32本机API(假设Windows环境,GTK +会有点相当于Linux系统上的上述库)。 AFAIK allegro不提供UI API,但它是图形/图像处理库。你当然可以使用allegro渲染你自己的控件,但那会更难
2)使用进度条控件创建一个UI窗口并将其放入一个单独的线程中(仍然,在Windows平台上,这可以通过在单独的线程上创建窗口和消息来完成)
3)将您的进度条与您的工作同步,并确保在加载完成时卸载窗口(即线程重新加入并终止)
答案 1 :(得分:1)
正如@Piotr S.已经提到的,你需要线程。 (您需要以并行形式编写程序。)
线程模型如下所示:
共享记忆:percentCounter
线程1:加载位图和字体,更新percentCounter
线程2:显示加载栏
我不确定Allegro是否提供了一些线程功能。 (例如,SFML确实如此)
否则,如果您至少使用C++11
,则使用C ++标准库中的std::thread
。
如果您只想显示应用程序正在加载(而不是“未响应”),您还可以在加载位图之前或之间向屏幕写一个简单的“加载”。