ゲームの基本処理
今回のサンプルはファイルが3つの構成です。
コンパイルが通り実行できると、Windowが一つ開きます。イベントを処理しているので☓ボタンで閉じることが可能です。イベントを処理していないとフリーズしたような感じになります。
ゲームについて書かれているサイトを参考にゲームの基本処理を書いてみました。これを基本として肉付けしていく考えです。
無限ループを処理本体としています。その中で、イベント(キー入力やメッセージ)の処理、キャラの移動などの更新処理、描画をします。
#include "gamemain.hpp" int main(int argc, char** argv) { return GAME().Main(); }
#pragma once #include <SDL.h> class GAME { public: int Main() { while (running) { event(); update(); render(); fps(); } return 0; } // ctor, dtor GAME(); ~GAME(); int init(); // 初期化 void cleanup(); // 後処理 void event(); // イベント void update(); // データ更新 void render(); // 描画 void fps(); // fpsの調整 private: bool running; SDL_Window* window; };
#include "gamemain.hpp" #include <iostream> GAME::GAME(){ init(); } GAME::~GAME(){ cleanup(); } /*----------------------------------------------------------------------------- * 初期化 *----------------------------------------------------------------------------- */ int GAME::init() { // SDL2の初期化 if (SDL_Init(SDL_INIT_EVERYTHING) < 0) { return 1; } // Windowを生成する window = SDL_CreateWindow( "Sample", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0 ); if (window == NULL) { std::cout << "ERROR : " << SDL_GetError() << std::endl; return 1; } // ループフラグ running = true; return 0; } /*----------------------------------------------------------------------------- * 後処理 *----------------------------------------------------------------------------- */ void GAME::cleanup() { SDL_DestroyWindow(window); SDL_Quit(); } /*----------------------------------------------------------------------------- * イベントを処理する *----------------------------------------------------------------------------- */ void GAME::event(){ SDL_Event event; // イベントがなくなるまでループする while (SDL_PollEvent(&event) == 1) { if (event.type == SDL_QUIT) { // 終了 running = false; } // ここにキー入力の処理等を書く } } /*----------------------------------------------------------------------------- * データを更新する *----------------------------------------------------------------------------- */ void GAME::update(){} /*----------------------------------------------------------------------------- * 描画する *----------------------------------------------------------------------------- */ void GAME::render(){} /*----------------------------------------------------------------------------- * FPSの調整をする *----------------------------------------------------------------------------- */ void GAME::fps(){}
コメント