友人に更新が少ないって言われた>挨拶
---
画面切り替え時のフェードイン・フェードアウトを作成しました。これまでもあったんだけど、CGraphicsクラスに入れて全ゲームモードで使い回せるようにしました。
フェードのやり方は色々あると思うけど、俺は一番手前に画面全体を覆う白いスプライトを用意して、それの透過値を変えることで実現してます。
いちいち初期化するのも面倒なので、FadeMove()を呼んだらその中で初期化もループ動作も行ってます。例によって即値が入ってたり、無駄な処理があっても気にしない。
絵を描いたりボスキャラ組んだり、まだやることはたくさんあるな。
//—————————————————————————– enum { FADE_IN, FADE_OUT, FADE_BLACK, FADE_WHITE }; struct Fade { float cnt; // 移動量 float now; // 現在の値 int color; // 色 int spr_no; // スプライトNo BOOL complete; // 完了フラグ }; //—————————————————————————– // フェード動作 // in_out:フェードインかフェードアウトか // minutes:フェードする秒数 // color:切り替わる色 BOOL CGraphics::FadeMove(int in_out, float minutes, int color) { RECT workRect; // 初期化 if (fade.spr_no==-1) { // フェード用画像登録 SetRect(&workRect, 0, 0, 47, 47); fade.spr_no=CreateSprite("data\graph\status.png", workRect); fade.now=1.0f; fade.complete=TRUE; } if (fade.complete) { // フェード開始 if (in_out==FADE_OUT) { fade.cnt=1.0f/((float)minutes*60.0f); fade.now=0.0f; } else { fade.cnt=-1*(1.0f/((float)minutes*60.0f)); fade.now=1.0f; } fade.color=color; fade.complete=FALSE; } else { // フェード中 fade.now+=fade.cnt; if (fade.now>=1.0f && fade.cnt>0) { fade.now=1.0f; fade.complete=TRUE; } if (fade.now<=0.0f && fade.cntFadeMove(FADE_IN, 0.8f, FADE_WHITE)) { // フェード完了後の処理 ……… } // みたいにして置いておく