第二十章 试着描绘背景吧
接下来我们来绘制背景吧。现在我们试着描绘龙神录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;
}
运行结果