我有一个文本文件,其中包含有关在我正在制作的游戏中放置切片的位置的信息,访问此信息的最快方法是使用for循环。但每当我使用for循环来获取所有信息时,它冻结程序大约12秒,在那12个我不能移动窗口,渲染器上没有任何更新/被绘制,然后当我点击窗口时它打破并说“窗口名称(无响应)”。我尝试使用while循环,但它仍然做同样的事情。
如何在没有程序冻结/挂起的情况下循环更大的数字(级别中有大约4,000个图块)?我只是使用SDL 2,没有涉及OpenGL。
int tiles = 4000;
int x[4000];
int y[4000];
tile obj[4000];
for(int i = 0; i < tiles; i++)
{
x[i] = txt.x;
y[i] = txt.y;
obj[i].Load(x[i], y[i]);
obj[i].Add();
SDL_RenderClear(ren);
LoadScreen();
SDL_RenderPresent(ren);
}
感谢。
答案 0 :(得分:0)
您需要创建另一个帖子。
在开始游戏之前等待加载所有数据是个好主意,因此在加载过程中,您不需要渲染任何内容。即使采用这种方法,最好使用另一个线程,不要让“UI线程”忙。在加载时,除了一个将停止加载线程的取消按钮外,您的UI将被禁用。
#include <process.h>
bool bReady;
void LoadTiles(void* pArg)
{
// Load Data here
*((int*)pArg) = 0;
///////////////////
bReady = true;
}
void main()
{
btnStart.SetEnabled(false);
bReady = false;
int iTarget;
uintptr_t hLoadingThread = _beginthread(LoadTiles, 0, &iTarget);
while (true) // usually you pick a message here
{
if (bReady)
btnStart.SetEnabled(true);
}
}
这只是一个非常简单的例子,多线程需要大量的工作和学习!