C++ 変数のアクセス方法について
Posted: 2013年3月16日(土) 04:28
こんばんは、ちうといいます。
今回横スクロールゲームの作成を予定しています。
そこで、変数のアクセス方法について、2つ質問が浮かびましたので回答をお願いします。
まずは画像をご覧ください。
私はゲームを作る際にはいつもMainLoopというシングルトンクラスを生成し、
そこをルートとする木の様な構造を取っています。
例えばEnemyクラス内でPlayerのX座標を知りたいとしたら、
MainLoop *mML = MainLoop :: getInstance();//シングルトンの唯一ポインタを得る
int player_ x = mML -> GameMain -> Play -> Player -> getX();
となります
ここで、いくつか問題点が出てきます。
・階層が深くなればなるほど、上記のようにコードが長くなってします。
・メインループをルートとして、すべての変数のアクセスできてしまうため、独立性が非常に低い。
・同階層同士(プレイヤーと敵のような関係)なのに、いちいちメインループを介さなければいけない。
2つの質問に対する私なりの考えです
1.firendを用いて、アクセスを局所化できるかとも思いましたが、そうすると
いたるところがfriendだらけになってしまい、可読性が低くなってしまうと予想できます。
2.アクセス範囲を親クラスと子クラス間に限定して、
(メインループとタイトル、ロード、オプション、ゲームメイン)(プレイとアイテム、プレイヤー、エネミー)のように
質問1の解決策を適応すればアクセス範囲が親と子間での狭いものになります。
しかし、プレイヤークラスの変数にアクセスする際はメインループからプレイヤーにアクセスできず、プレイヤークラスに直接アクセス、またはプレイクラスにアクセスする必要があります。
プレイヤークラスにアクセスするのは論外ですしプレイクラスにアクセスするのも「アクセスの制限が低すぎる。
結局はメインループから辿ってアクセスするのと大差ない様な気がします。
ここで質問です。
質問1:プレイヤーと敵の様な同じ親クラスを持つクラス同士で変数をいちいちメインループから辿らずにアクセスにはどのような方法があるでしょうか?
質問2:質問1と似ていますが、今回の私のように、ルートから変数をたどっていくようなアクセス方法以外にどのようなアクセス方法があるでしょうか。
特に2は少々なげやりのような質問で申し訳ありませんが、参考になるサイト、またはヒントになるようなワードだけでも回答していただければと思います。
今回横スクロールゲームの作成を予定しています。
そこで、変数のアクセス方法について、2つ質問が浮かびましたので回答をお願いします。
まずは画像をご覧ください。
私はゲームを作る際にはいつもMainLoopというシングルトンクラスを生成し、
そこをルートとする木の様な構造を取っています。
例えばEnemyクラス内でPlayerのX座標を知りたいとしたら、
MainLoop *mML = MainLoop :: getInstance();//シングルトンの唯一ポインタを得る
int player_ x = mML -> GameMain -> Play -> Player -> getX();
となります
ここで、いくつか問題点が出てきます。
・階層が深くなればなるほど、上記のようにコードが長くなってします。
・メインループをルートとして、すべての変数のアクセスできてしまうため、独立性が非常に低い。
・同階層同士(プレイヤーと敵のような関係)なのに、いちいちメインループを介さなければいけない。
2つの質問に対する私なりの考えです
1.firendを用いて、アクセスを局所化できるかとも思いましたが、そうすると
いたるところがfriendだらけになってしまい、可読性が低くなってしまうと予想できます。
2.アクセス範囲を親クラスと子クラス間に限定して、
(メインループとタイトル、ロード、オプション、ゲームメイン)(プレイとアイテム、プレイヤー、エネミー)のように
質問1の解決策を適応すればアクセス範囲が親と子間での狭いものになります。
しかし、プレイヤークラスの変数にアクセスする際はメインループからプレイヤーにアクセスできず、プレイヤークラスに直接アクセス、またはプレイクラスにアクセスする必要があります。
プレイヤークラスにアクセスするのは論外ですしプレイクラスにアクセスするのも「アクセスの制限が低すぎる。
結局はメインループから辿ってアクセスするのと大差ない様な気がします。
ここで質問です。
質問1:プレイヤーと敵の様な同じ親クラスを持つクラス同士で変数をいちいちメインループから辿らずにアクセスにはどのような方法があるでしょうか?
質問2:質問1と似ていますが、今回の私のように、ルートから変数をたどっていくようなアクセス方法以外にどのようなアクセス方法があるでしょうか。
特に2は少々なげやりのような質問で申し訳ありませんが、参考になるサイト、またはヒントになるようなワードだけでも回答していただければと思います。

