// Game Loop void Game::GameLoop( ) { Graphics graphics; Input input; SDL_Event sdlEvent; m_Player = Player( graphics, 280.f, 252.f ); m_Level = Level( "Level1", Vector2( 100, 100 ), graphics ); float lastUpdateTime = SDL_GetTicks( ); while( true ) { // Update input input.Update( ); // SDL Events if ( SDL_PollEvent( &sdlEvent ) ) { // Key is down if ( sdlEvent.type == SDL_KEYDOWN ) { // is it repeating if ( sdlEvent.key.repeat == 0 ) { input.KeyDownEvent( sdlEvent ); } } // Key is released else if ( sdlEvent.type == SDL_KEYUP ) { input.KeyUpEvent( sdlEvent ); } // User quits else if ( sdlEvent.type == SDL_QUIT ) { return; } } // Quit if escape is pressed if ( input.WasKeyPressed( SDL_SCANCODE_ESCAPE ) ) { return; } // Player character if ( input.IsKeyHeld( SDL_SCANCODE_LEFT ) || input.IsKeyHeld( SDL_SCANCODE_A ) ) { m_Player.MovePlayer( Direction::LEFT ); } else if ( input.IsKeyHeld( SDL_SCANCODE_RIGHT ) || input.IsKeyHeld( SDL_SCANCODE_D ) ) { m_Player.MovePlayer( Direction::RIGHT ); } else { m_Player.StopMoving( ); } // Jump if ( input.WasKeyPressed( SDL_SCANCODE_SPACE ) ) { m_Player.Jump( ); } // Debug bDrawDebug = ( input.IsKeyHeld( SDL_SCANCODE_5 ) ) ? true : false; const float CURRENT_TIME_IN_MS = SDL_GetTicks( ); float elapsedTimeInMS = CURRENT_TIME_IN_MS - lastUpdateTime; lastUpdateTime = CURRENT_TIME_IN_MS; Tick( std::fmin( elapsedTimeInMS, GameStats::MAX_FRAME_TIME ) ); Draw( graphics ); } SDL_Quit( ); }