原文地址:
接下来我们来绘制背景吧,来绘制龙神录的第一个舞台吧。
虽然说起来有点复杂,我们预先在数据文件里存放一个背景文件的图片快照,把这个滚动起来看看吧。
要把背景滚动起来,基本说来就是上下连续的描绘两张一样的图片,把图片大小的周期和滚动的周期调成一样的就行了。
————————————————————————————————————————————————————————————
---- 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();
}
————————————————————————————————————————————————————————————
首先,由于要绘制大面积的图像,对不会显示的部分进行计算绘制是不必要的。
所以,我们把可能要绘制的部分放到 FIELD 区域里面。
然后,把一张图片,在错开一张图片的大小的两个位置上进行绘制,然后以相同的速度进行滚动。
这里使用到了每一帧都会增加的 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;//如果按下ESC的话,跳出
ScreenFlip();//刷新双缓冲
count++;
}
DxLib_End();//DxLib的退出处理
return 0;
}
————————————————————————————————————————————————————————————————
运行结果:
(PS:
拖延症犯了,本来都烂尾了,看看,这都半年没更了啊。
这半年,坚持跑步一个月后,感觉身体不行,去医院检查了之后就没跑了。买了个琴,也没怎么练了。
半年,在新公司呆了半年,项目都还没上线,唉。。据说快了吧。反正我就一打酱油的,今天又一个小问题卡了半天。。
技术没长进,代码框架不大懂,自己的东西bug一堆。不敢乱改,出错只希望不是我的错,遇到问题就慌了去寻求帮助。。。
老大今天一句话说的对啊,没有无缘无故的错误,程序怎么出错的查一下改回来就是了。别说不知道,老总在你后面,你敢说不知道?
唉,技术渣的码农啊。。。)
本人CSDN博客目录: