一、基本游戏架构
二、示例
1. example01---基于基本游戏架构的example00:
/******************************************************************************
game strtucture:
initialise
|
|
----get input
| |
| |
| do physics
| |
| |
-----render
|
|
exit
base on game strture, modify example00
******************************************************************************/
SDL_Window *g_pWindow = NULL;
SDL_Renderer*g_pRenderer = NULL;
bool g_bRunning = false;
Uint8 g_r = 0, g_g = 0, g_b = 0;
bool init(const char *title, int xpos, int ypos, int height, int width, int flags)
{
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) return false;
g_pWindow = SDL_CreateWindow(title, xpos, ypos, height, width, flags);
if (NULL == g_pWindow) return false;
g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0);
return true;
}
void render()
{
SDL_SetRenderDrawColor(g_pRenderer, g_r, g_g, g_b, 255);
SDL_RenderClear(g_pRenderer);
SDL_RenderPresent(g_pRenderer);
}
void update()
{
SDL_Delay(3000);
}
void handleEvents()
{
g_g += 30;
}
void clean()
{
SDL_Quit();
}
void example01()
{
if (false == init("example01:Setting up SDL",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480, SDL_WINDOW_SHOWN))
{
return;
}
g_bRunning = true;
while (g_bRunning)
{
handleEvents();
update();
render();
}
clean();
return;
}
/******************************************************************************
example02: c++ package of example01
******************************************************************************/
class Game
{
public:
Game():m_pWindow(NULL),m_pRenderer(NULL), m_bRunning(false){};
~Game(){};
bool init(const char* title, int xpos, int ypos, int width, int height, int flags);
void render();
void update();
void handleEvents();
bool running() {return m_bRunning; }
void clean();
private:
SDL_Window *m_pWindow;
SDL_Renderer *m_pRenderer;
bool m_bRunning;
};
bool Game::init(const char *title, int xpos, int ypos, int height, int width, int flags)
{
if (SDL_Init(SDL_INIT_EVERYTHING) < 0) return false;
m_pWindow = SDL_CreateWindow(title, xpos, ypos, height, width, flags);
if (NULL == m_pWindow) return false;
m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);
SDL_SetRenderDrawColor(m_pRenderer, 255, 255, 255, 255);
m_bRunning = true;
return true;
}
void Game::render()
{
SDL_RenderClear(m_pRenderer);
SDL_RenderPresent(m_pRenderer);
}
void Game::clean()
{
SDL_DestroyWindow(m_pWindow);
SDL_DestroyRenderer(m_pRenderer);
SDL_Quit();
}
void Game::handleEvents()
{
SDL_Event sdl_event;
if (SDL_PollEvent(&sdl_event))
{
switch(sdl_event.type)
{
case SDL_QUIT:
m_bRunning = false;
break;
default:
break;
}
}
}
void Game::update()
{
}
void example02()
{
Game game;
game.init("example02: game structure", 200, 200, 640, 480, 0);
while (game.running())
{
game.handleEvents();
game.update();
game.render();
}
game.clean();
}