はすべての私のグローバルに対するGLOBAL.Hを宣言しました。メインで初期化します。私の「基本的/一般的な」変数(カメラ、位置、反復番号など)はすべて別々に宣言されていました。メイン:
include "global.h"
Vector position_g = ...
Vector angles_g = ...
int time_g = 0;
int main() {
...
}
しかし、「セクション固有」の変数、つまりゲームモード/レベルが1つしかない変数では、ユニオンと列挙型を作成しました。
enum mainGame{skipLevel, ...};
enum mainMenu {viewingSettings, ...};
typedef union generic_union {
int i;
char c;
bool b;
char s[100]; // or char * s;
float f;
} generic;
globalData変数が宣言されました。使用できるようになりました
extern generic * globalData; // in global.h
generic * globalData = NULL; // in main
:あなたのキーを押して処理関数では、あなたがグローバルデータ[skipLevel]切り替えるためのキーを割り当てることができます今すぐ
int main() {
...
globalData = malloc (sizeof (generic)*numGlobals);
globalData[skipLevel].b = false;
...
}
。それ以外のファイルでは、global.hを含めるだけです。
include "global.h"
void onKeyPress (...) {
If (inMainGame) {
If (key == SPACE) {
globalData [skipLevel] = true;
}
}
そして最後に使用:
include "global.h"
void levelManager() {
...
if (globalData[skipLevel]) level++;
...
}
賛否 のみの周り変数と1含めるを持ち歩く必要があります。
不要な変数やそのインスタンスで使用している変数を解放することができます。 (「汚染」を減らすのに有用な非常に)。もし1つのゲームモードが1つの変数しか必要としないならば、それはあなたが48を必要とするならば、それを保存しなければならないものです。
任意の変数型をユニオンに追加することで、簡単に処理できます。
が使用されている(あなたがmainMenu_eのように列挙型のスタイルを使用することができます列挙型のための変数の一般的な労働組合間接参照型へ(いないそのハード)
そしてWATCHOUTを覚えておく必要が
短所完全にポータブル
複雑さが増しますが、可変数が増えるにつれて、このようなシステムは価値があるので、このようにしてください。
個人的に私はこれが非常にきちんとしています。 これがわからない場合、私はそれを修正しようとします:)
ありがとう、それは動作するように見えます。 –