第二十章 试着描绘背景吧

>>点此回到教程目录

接下来我们来绘制背景吧。现在我们试着描绘龙神录stage 1的背景。

……虽然这么说可是还是有些难,而数据文件里已经事先放进了拍成了快照的背景(译者注:原作中为3D背景),因此让我们先让它滚动起来吧。(译者注:原文为スクロール,也就是scroll,这里的滚动……嘛,您还是自己想象吧。)

所谓背景的滚动,就是这样一个循环:让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个位置错开着绘制(总共绘制2次),以同样的速度往下滚动。

这里我们使用一个计数器count,它每一帧增加1。

嘛,这次仅仅是让照片滚动而已,因此很简单。

—-在 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();//自机射击main
                enemy_main();//敌人处理main
                shot_main(); //射击main
                out_main();  //碰撞计算
                effect_main();//特效main
                graph_main();//绘制main
                stage_count++;
                break;

—-在 main.cpp 中进行以下追加 —-

                music_play();
        if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//如果按下ESC键则跳出循环
        ScreenFlip();//里外画面翻转

        /***修改请注意***/
        count++;
        /***修改请注意***/

    }

    DxLib_End();//DX Library终结处理
    return 0;
}

运行结果



>>点此回到教程目录

results matching ""

    No results matching ""