GDI 窗口中的游戏循环/一段时间后不刷新并崩溃
Game loop in GDI window / doesn't refresh and crashes after a while
这是我当前在普通窗口中的游戏循环:
while(running)
{
while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) )
{
if( msg.message == WM_QUIT )
{
running = false;
}
TranslateMessage( &msg );
DrawGame(&game);
DispatchMessage( &msg );
}
UpdateGame(&game);
InvalidateRect(hwnd, NULL, 1);
//Sleep(100);
}
。但是我真的应该把DrawGame放在翻译和DispatchMessage之间吗?如果我把DrawGame放在UpdateGame的上方/下方,则不会绘制任何内容。
过了一会儿,如果我画一个简单的矩形,它们开始相互重叠。它运行良好大约一分钟,绘制一个矩形网格(由于以下原因而错位:您设置的窗口大小不是正确的窗口大小。过了一会儿,它会绘制另一个网格,有时它会完全搞砸,窗口似乎已经崩溃,我必须在Visual Studio中按"停止"按钮。
那么,我究竟在哪里放置游戏循环,我怎么知道何时绘制游戏?我需要主要绘制矩形,尽管这也不太好。
处理WM_PAINT消息时,您应该从Windows消息回调调用DrawGame()。
在消息循环中,您应该只获取 Windows 消息并将其调度到相应的回调。
此外,这也是更新游戏世界的地方,但不是用于进行绘制调用的地方。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- GDI 窗口中的游戏循环/一段时间后不刷新并崩溃