キャラクタ構造体とは

この章で使用するプログラムおよび画像ファイル

この章では、キャラクタを制御する各変数を構造体で持ち、キャラクタ情報を効率的に管理する方法を学ぶ。

キャラクタ構造体とは

今までのプログラムでは、キャラクタ情報を全てグローバル変数として宣言している。

//=============================================================================
//  ゲーム処理関係の自作関数群
//  Copyright NKC Game Staff(←自分の名前) 
//-----------------------------------------------------------------------------
#include "NKC_Common.h"

// グローバル変数
/* 自ソースでのみ利用するもの */
//---- 背景
static TLVERTX BackVertex[4];       // 頂点情報配列
//---- 自機
static TLVERTX MyCharaVertex[4];    // 頂点情報配列
static RECT MyCharaHitRect;         // 当たり判定矩形
static float MyCharaMoveX, MyCharaMoveY; // 移動量
//---- 敵
static TLVERTX EnemyVertex[4];      // 頂点情報配列
static RECT EnemyHitRect;           // 当たり判定矩形
static float EnemyMoveX, EnemyMoveY; // 移動量

《問題点》

キャラクタが動くゲームを考える場合、キャラクタに対する情報は今までと比べて相当増えることが予想される。変数名を工夫したとしても、情報が増えれば増えるほど分かりにくく、かつ、覚えにくくなることは容易に想像できる。

そこで、キャラクタが持つべき情報を構造体で宣言し、キャラクタの数だけ構造体変数を持つことにより、管理を容易にする方法を紹介する。

※構造体についてはC言語の教科書またはWeb教材のC言語入門「第10章構造体」を参照

キャラクタ構造体の作り方

現在、自キャラまたは敵キャラが持っている情報は次の通りである。

  1. キャラクタの表示位置と大きさ(頂点情報配列)
  2. 当たり判定矩形
  3. 移動量(X方向、Y方向)

※テクスチャ・オブジェクトについては今回は考えないものとする。

これらの情報を持つ構造体を作成すると、次のようになる。

/* キャラクタ情報構造体 */
typedef struct _STATUS {
    TLVERTX Vertex[4];                 // 頂点情報配列
    RECT HitRect;                      // 当たり判定矩形情報
    float MoveX, MoveY;                // 移動量
} STATUS, *LPSTATUS;

《POINT》

キャラクタ情報を構造体で宣言しておけば、情報(変数)を増やしたい場合でも構造体を修正するだけでよいため、生産性が向上する。また、Visual C++の入力補完機能を使えるため、メンバ名を覚える必要がない。

キャラクタ情報構造体の宣言

では、この構造体をどこで宣言すればよいのだろうか?この章で用意したプログラムの場合、キャラクタ情報は「ゲーム画面の自キャラ・敵キャラ」である。であるならば、game.cppで宣言すればよいことになる。
しかし実際のゲーム製作において、ゲーム処理が1つのソース・ファイルで作成されるとは限らない。また、ゲーム処理以外でもキャラクタ構造体を遣うことは容易に想像できる。このように、キャラクタ構造体は複数のソースで利用されると考えられるため、共通ヘッダ・ファイル「NKC_Common.h」に宣言するのがよいだろう。



NEXT(キャラクタ用構造体変数の作り方と使い方)