My main loop:
Code: Select all
sht::system::Clock clock;
float time_gameclock = clock.GetTime();
float time_physics_prev, time_physics_curr;
time_physics_prev = time_physics_curr = time_gameclock;
const float kTickTime = 0.02f;
while (!PlatformNeedQuit())
{
// Render a frame
app->BeginFrame();
app->Render();
app->EndFrame();
// Update physics
time_physics_curr = clock.GetTime();
dynamics_world_->stepSimulation(time_physics_curr - time_physics_prev, 10, 0.002f);
time_physics_prev = time_physics_curr;
// Game Clock part of the loop
/* This ticks once every TickMs milliseconds on average */
float dt = clock.GetTime() - time_gameclock;
while (dt >= kTickTime)
{
dt -= kTickTime;
time_gameclock += kTickTime;
PlatformPollEvents();
app->SetFrameTime(kTickTime);
app->Update();
}
}
Code: Select all
void PlatformPollEvents()
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
// Handle or dispatch messages
if (msg.message == WM_QUIT)
{
g_window.need_quit = true;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
Code: Select all
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
.....
switch (uMsg)
{
.....
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
{
const sht::PublicKey translated_key = TranslateKey(wParam, lParam);
if (translated_key == sht::PublicKey::kUnknown)
break;
const int modifiers = TranslateModifiers();
app->keys().key_down(translated_key) = true;
app->keys().modifiers() = modifiers;
app->OnKeyDown(translated_key, modifiers);
break;
}
.....
}
return DefWindowProc(hWnd, uMsg, wParam, lParam); // Pass Unhandled Messages
}
I guess you may had the same problem earlier. Any suggestions?