コード例 #1
0
ファイル: Game.cpp プロジェクト: Vawx/CaveStory_Remake_SDL
// 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( );
}