文章目录
Game Class
根据上面那个简单框架结构, 将代码包装到一个Game类里
// Game.h
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include <SDL.h>
class Game
{
public:
bool init(const char* title,
int xpos = SDL_WINDOWPOS_CENTERED,
int ypos = SDL_WINDOWPOS_CENTERED,
int width = 640, int height = 480,
int flags = SDL_WINDOW_SHOWN);
void render();
void update();
void handleEvents();
void clean();
bool running() { return m_bRunning; }
private:
SDL_Window* m_pWindow;
SDL_Renderer* m_pRenderer;
bool m_bRunning;
};
#endif // GAME_H_INCLUDED
// Game.cpp
#include "Game.h"
#include <iostream>
bool Game::init(const char* title, int xpos, int ypos, int width, int height, int flags)
{
bool success = true;
if (SDL_Init(SDL_INIT_EVERYTHING) == 0) {
std::cout << "SDL init success\n";
m_pWindow = SDL_CreateWindow(title, xpos, ypos, width, height, flags);
if (m_pWindow) {
std::cout << "window creation success\n";
m_pRenderer = SDL_CreateRenderer(m_pWindow, -1, 0);
if (m_pRenderer) {
std::cout << "render creation success\n";
SDL_SetRenderDrawColor(m_pRenderer, 255, 255, 255, 255);
}
else {
std::cout << "render creation fail\n";
success = false;
}
}
else {
std::cout << "window creation fail\n";
success = false;
}
}
else {
std::cout << "SDL init fail\n";
success = false;
}
std::cout << "init success\n";
m_bRunning = true;
return success;
}
void Game::render()
{
SDL_RenderClear(m_pRenderer);
SDL_RenderPresent(m_pRenderer);
}
void Game::update()
{
}
void Game::clean()
{
std::cout << "cleaning game\n";
SDL_DestroyRenderer(m_pRenderer);
m_pRenderer = nullptr;
SDL_DestroyWindow(m_pWindow);
m_pWindow = nullptr;
SDL_Quit();
}
void Game::handleEvents()
{
SDL_Event event;
if (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
m_bRunning = false;
break;
default:
break;
}
}
}
// main.cpp
#include "Game.h"
using namespace std;
Game* g_game = NULL;
int main(int argc, char* argv[])
{
g_game = new Game();
g_game->init("WM brother");
while (g_game->running()) {
g_game->handleEvents();
g_game->update();
g_game->render();
}
g_game->clean();
return 0;
}
将文件放入对应位置, 编译运行就可.