次は背景をかいてみましょう。龍神録のステージ1の背景を描いてみます。

・・・と言ってもちょっと難しいので、データファイルにあらかじめ背景をスナップ写真に撮った画像が入っていますから、

それをスクロールさせてみましょう。

背景のスクロールの基本は、画像1枚を上下2枚連続で描画してスクロールし、

画像サイズの周期に合わせてループさせることです。


---- graph_back.cpp を変更 ----

#include "../include/GV.h"

void graph_back00(){
        SetDrawArea( 32 , 16 , 416 , 464 ) ;//描画可能エリアを設定
        DrawGraph(FIELD_X,count%700+FIELD_Y-700,img_back[0],FALSE);
        DrawGraph(FIELD_X,count%700+FIELD_Y    ,img_back[0],FALSE);
        SetDrawArea( 0, 0, 640, 480);//エリアを戻す
}

void graph_back_main(){
        graph_back00();
}


まず、大きく画面からはみ出て描画するので、要らないエリアまで計算するのは勿体無いですから

描画可能エリアをフィールドエリア内のみに設定します。

その後、1枚の画像を2回位置を1画像分ずらして描画し、同じ速度でスクロールさせていきます。

ここでは1フレームに1カウント増えるcountを使ってやっています。

まぁ今回はただの写真をスクロールしているだけなので簡単ですね。



---- graph.cpp の graph_main 関数に以下を追加 ----

extern void graph_back_main();

void graph_main(){
        graph_back_main();


---- GV.h に以下を追加 ----

GLOBAL int img_back[10];//背景用画像
GLOBAL int func_state,stage_count,count;


---- load.cpp の load関数に以下を追加 ----

img_back[0] = LoadGraph("../dat/img/back/0/back0.png");


---- main.cpp のmain関数の以下を変更 ----

            case 100://通常処理
                calc_ch();   //キャラクタ計算
                ch_move();   //キャラクタの移動制御
                cshot_main();//自機ショットメイン
                enemy_main();//敵処理メイン
                shot_main(); //ショットメイン
                out_main();  //当たり計算
                effect_main();//エフェクトメイン
                graph_main();//描画メイン
                stage_count++;
                break;


---- main.cpp に以下を追加 ----

                music_play();
        if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
        ScreenFlip();//裏画面反映
        count++;
    }

    DxLib_End();//DXライブラリ終了処理
    return 0;
}




実行結果


- Remical Soft -