gpt4 book ai didi

c++ - 影响帧率的 allegro 5 线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:35 53 4
gpt4 key购买 nike

我正在使用 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()

关于c++ - 影响帧率的 allegro 5 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477996/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com