ゲームの基本処理
今回のサンプルはファイルが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(){}


コメント