関数の作り方
Posted: 2011年6月13日(月) 17:56
月一程度の割合でC++を勉強しているC++初心者です。
DXライブラリ
VC++2010
を使用しています。
まだ一つもゲームと言えるものを作った事がないです。
現在もテーマを決めてゲームを作っている訳でもないのですが
ゲームに使いそうな関数を勝手に妄想して作っています。
※抽象的な内容の件名にした割に具体的な質問になっています。
これに限ったことではないと思いこの件名にさせていただきました。
例えばの話なのですが
画面切り替え時にはフェードアウトするように画面が切り替わることがゲームではよくあると考え
このときフェードアウトする関数を妄想し作ってみました。
上の関数ではフェードアウトする直前の画像の識別番号と位置と速度を引数として受け取り実行します。
とりあえずうまくできたのですが、この関数だとフェードアウトする直前の画像が識別番号として存在する必要があります。
ですが、例えばRPGなどで戦闘画面からマップ画面に切り替わる時などには、画面には背景、戦闘後の経験値アップなどの文字列など各画像が挿入されていて、その画面を上から覆うようにフェードアウトしていかなければなりません。
上の関数ではこれは無理です。
文字は同時に暗くなってくれる事は確認済みですが
このフェードアウト関数内で文字を描写しなければならず、さらに言えば動きのある描写をフェードアウトする事も大抵の場合不可能であり、実用性はほとんどありません。
長くなってしまって申し訳ないのですが
フェードアウトという効果を実行しつつ、本来の処理(ゲームの進行)を行うにはどうしたらいいのでしょうか?
DXライブラリの音関連の関数には「音楽をBGMとして再生(ゲームの進行と平行して再生)」がありますがフェードアウト関数もこれと同じ要領で呼び出せるように設計できないものかと考えています。
また、関数うんぬんではなくC++において根本的にプログラムの作り方の概念を勘違いしているようでしたらその点に関してもご指導くださるようよろしくお願いします。
DXライブラリ
VC++2010
を使用しています。
まだ一つもゲームと言えるものを作った事がないです。
現在もテーマを決めてゲームを作っている訳でもないのですが
ゲームに使いそうな関数を勝手に妄想して作っています。
※抽象的な内容の件名にした割に具体的な質問になっています。
これに限ったことではないと思いこの件名にさせていただきました。
例えばの話なのですが
画面切り替え時にはフェードアウトするように画面が切り替わることがゲームではよくあると考え
このときフェードアウトする関数を妄想し作ってみました。
//徐々に暗くする関数
void fadeout( static int x_o , static int y_o , static int G_Handle_o,static int f_o)
//引数の内訳:画像の位置(x、y)、グラフィックハンドル、フェードアウトの速さ(低いほど速い)
{
static char Key_o[256];
static int kido_o=255;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key_o ) && !Key_o[KEY_INPUT_ESCAPE])
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
{
kido_o=kido_o - 6; //画面更新につき輝度を6づつ減らす
DrawGraph( x_o,y_o, G_Handle_o, TRUE) ;//画像を描画
WaitTimer(f_o);//フェードアウトの速さを決定
SetDrawBright( kido_o , kido_o , kido_o ) ; //輝度を画面に反映
if(kido_o <= 2 )//輝度が2以下になったら
{
kido_o=255;//kidoを255に戻し
break; //ループから抜ける
}
}
SetDrawBright(kido_o,kido_o,kido_o); //輝度255を画面に反映させ、フェードアウト関数終了
}上の関数ではフェードアウトする直前の画像の識別番号と位置と速度を引数として受け取り実行します。
とりあえずうまくできたのですが、この関数だとフェードアウトする直前の画像が識別番号として存在する必要があります。
ですが、例えばRPGなどで戦闘画面からマップ画面に切り替わる時などには、画面には背景、戦闘後の経験値アップなどの文字列など各画像が挿入されていて、その画面を上から覆うようにフェードアウトしていかなければなりません。
上の関数ではこれは無理です。
文字は同時に暗くなってくれる事は確認済みですが
このフェードアウト関数内で文字を描写しなければならず、さらに言えば動きのある描写をフェードアウトする事も大抵の場合不可能であり、実用性はほとんどありません。
長くなってしまって申し訳ないのですが
フェードアウトという効果を実行しつつ、本来の処理(ゲームの進行)を行うにはどうしたらいいのでしょうか?
DXライブラリの音関連の関数には「音楽をBGMとして再生(ゲームの進行と平行して再生)」がありますがフェードアウト関数もこれと同じ要領で呼び出せるように設計できないものかと考えています。
また、関数うんぬんではなくC++において根本的にプログラムの作り方の概念を勘違いしているようでしたらその点に関してもご指導くださるようよろしくお願いします。