快板5线程影响帧率
allegro 5 thread affecting framerate
我正在使用Visual Studio c++和Allegro 5制作游戏。为了制作一个加载动画,我决定使用al_create_thread创建一个线程,用它加载我所有的图像和声音,然后在一切加载后销毁它。这样我就可以使用while循环在线程加载所有内容时播放动画。不幸的是,在切换到这种方法后,我的帧率急剧下降,基本上使游戏无法玩,如果我在主函数中加载所有内容,帧率会恢复正常,但我无法获得加载动画。我不明白为什么线程会引起问题,如果我销毁它后,它完成了。
下面是我的线程函数:static void*loading_thread(ALLEGRO_THREAD*load, void*data)
{
al_init_image_addon();
al_init_primitives_addon();
al_install_audio();
al_init_acodec_addon();
al_reserve_samples(20);
machinegun = al_load_sample("machine gun.ogg");
machinegun_instance = al_create_sample_instance(machinegun);
al_set_sample_instance_playmode(machinegun_instance, ALLEGRO_PLAYMODE_LOOP);
al_set_sample_instance_gain(machinegun_instance, 2);
al_attach_sample_instance_to_mixer(machinegun_instance, al_get_default_mixer());
zombie_moan = al_load_sample("zombie moan.ogg");
zombie_attack = al_load_sample("zombie attack.ogg");
jab = al_load_sample("jab.ogg");
all_nightmare_long = al_load_sample("All Nightmare Long.ogg");
all_nightmare_long_instance = al_create_sample_instance(all_nightmare_long);
al_set_sample_instance_playmode(all_nightmare_long_instance, ALLEGRO_PLAYMODE_LOOP);
al_attach_sample_instance_to_mixer(all_nightmare_long_instance,al_get_default_mixer());
playerImage = al_load_bitmap("soldier.bmp");
al_convert_mask_to_alpha(playerImage, al_map_rgb(110, 80, 52));
player->Init(playerImage);
objects.push_back(player);
zombieImage = al_load_bitmap("zombie3.bmp");
al_convert_mask_to_alpha(zombieImage, al_map_rgb(106, 76, 48));
done_loading = true;
return NULL;
}
下面是main中使用线程函数的代码(while循环只是我的动画的占位符):
loading = al_create_thread(loading_thread, NULL);
al_start_thread(loading);
while(!done_loading)
{
al_draw_textf(font18, al_map_rgb(255,255,255), WIDTH / 2, HEIGHT / 2, ALLEGRO_ALIGN_CENTRE, "Loading... %i", a);
a++;
al_flip_display();
al_clear_to_color(al_map_rgb(0,0,0));
}
al_destroy_thread(loading);
在没有显示的线程上加载时,您将获得内存位图。
在Allegro 5.0上,一旦活动线程是显示的线程,您就可以al_clone_bitmap()
。在5.1中,您可以使用al_convert_bitmap()
或al_convert_bitmaps()
相关文章:
- 如何提高 OpenCV 实时检测器应用程序的帧率?
- C++ 如何设置精确的帧率限制?
- 提高Basler相机的帧率
- 低帧率,仅使用地图和小地图绘制 (SFML)
- OpenCV视频阅读慢帧率
- C++SDL帧率脉冲
- OpenGL帧率:与窗口大小的连接
- 在openCV中编写可变帧率视频
- 快板5线程影响帧率
- OpenCV VideoWriter帧率问题
- 如何找到视频的帧率使用c++ opencv 2.4.10
- 控制帧率
- 我如何获得和改变OGRE应用程序的帧率?
- OpenCV慢相机帧率
- 数学:无论帧率如何,都能平稳地减速
- 如何改变libav解码帧率
- 发行控制游戏帧率的c++
- OpenCV -从播放显著提高帧率
- OpenCV:低帧率的限制是什么?
- 将帧率提高到30 fps,并从AVT GigE相机获得bayerr8