"ポインタを使わずにシューティングゲームを作る"
とのことでした。
そこで、自分はポインタを使用した本格的なカプセル化したゲームを作ろうとしました。
とりあえず一つ目の目標として龍神録でのGV.hでのGLOBALと頭につけた変数をすべてカプセル化し、ポインタでの引渡しをします。
しかし、関数同士でスマートに値を受け渡すには、というところで躓きました。
具体的に言うと、画像です。
キー入力はmain関数から呼び出し→ファイル内スコープでのキー取得関数を利用して返り値を返す。
ということをすれば、まぁカプセル化になるのですが(実際にはクラス使ってないのでカプセル化も何もない)
画像だと
ロードされたハンドルを描画関数にまで持って行き、ゲーム中保持し続けるにはどうしたらいいのかわからないです。
ロードファイルによって割り当てられたハンドル変数は
それまでグローバル変数を前もって宣言しハンドルを代入し、描画関数によってハンドル変数に沿った画像を選択して描画していましたが
ポインタを使いグローバル変数を使わないとなるとロード関数から直接描画関数へハンドルの値を持っていくことになり、
①今までグローバル変数にハンドルを入れてきたので保持できていた変数が関数のスコープを抜けると同時に破棄されてしまうのでは?
というのと
②「mainループから(実際に)描画するための関数として呼び出される」用途と「描画するためにハンドルをロード関数から貰う」用途が両立せず
前者だとハンドルが未定義(保持していないため)、後者だと描画関数として役割を果たさないのではないか?
という疑問があります。
静的変数はできるだけ使わない方向です。
この場合、クラスメンバメソッドとして
1.ハンドルを受け取り、クラス変数として格納する関数と
2.別ファイルからの、例えばユニットの画像の種類番号を引数として貰い実際に描画する関数
として分けるのがいいのではないかと思うのですがコードが無駄に肥大化してたり、考え方が根本的に間違ってないかという質問です。
質問を簡潔にまとめると グローバル変数"handle"を使っていた上記のコードを
ポインタを置き換えるためにはどうしたらいいのでしょうか?
「ハンドル変数を渡す・ロードする」のは一回のみです。
この場合
class draw{
int handle;
public:
void come_on_handle(int tmp){
handle=tmp;
}
void draw_unit{
DrawRotaGraph(x,y, 1.0,0,handle[0],TRUE );
}
}
お粗末な長文を最後まで読んでくださってありがとうございます。
※↑のコードだとポインタ使ってません。ポインタは使いたいです。(幻想かもしれませんが)スマートになるため(´・ω・`)