嗯,我發現消息循環的奇怪點。directx中消息循環的基本概念
第一,鎖定下面
MSG msg = {0};
while(WM_QUIT != msg.message)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
Render(); // Do some rendering
}
}
這個代碼是的DirectX的教程,並且該部分是消息循環的一部分。
如果我點擊鼠標,它將作爲消息進入隊列。
所以這樣的輸入應該在win api的proc函數中進行處理。
現在,peekMessage返回true,render()將不會在框架中調用,當我點擊。
我覺得代碼被改變if〜else to if〜if for render when I click。
你能解釋一下嗎?
我主要使用Render()。 使用窗口消息系統和directx都不好。 就像你說的那樣,Render()的優先級低於消息。 這是DirectX教程,所以我認爲這個代碼可能無法有效的DirectX。 您對此有何看法? – Rikimaru 2013-05-07 00:59:03
該代碼可以正常工作,並且對於教程而言非常簡單。如果你寫作遊戲結束了,並且你發現你無法保持幀速率,你可以做一些事情,比如將渲染切換到不同的線程,或者在用戶優先級上發佈消息以進行繪製,但爲了教程的目的,這將會沒事的。 – 2013-05-07 13:07:48