学习完easyx的基础操作之后,我继续开始pvz的代码编写
在跟进视频过程中我的收获最大的不是学习了新的代码,而是打开了新的思路
以下是我学习到的思路:
1.动画模块
所有图像的放置都需要先载入。对于动画来说,可以制作一个对象每一帧的图像,将这些图像加载到一个数组中。背景图的刷新,对象的渲染需要用到时间模块,可以通过计算时间得到时间间隔,设定所需要的刷新间隔,比如以下代码
int timer = 0;
int flag = 1;
while(1){
timer += getDelay();
if (timer > 50) {
flag = 1;
timer = 0;
}
if (flag) {
flag = 0;
UpdateWindow();//这个函数是自定义的图像渲染模块
}
}
再通过修改对象放置的图片参数,就能设计出动画了
比如定义一个图像数据组
IMAGE img[20];
每次循环顺序放映其中的一张,得到动画效果。
2.输入模块
目前初步掌握了鼠标和键盘的消息函数
ExMessage msg;
int flag = 0;
if(peekmessage(&msg)){
if(msg.message == WM_LBUTTONDOWN &&
msg.x > X1 && msg.x < X2 && //判断鼠标点击区域
msg.y > Y1 && msg.y < Y2){
(statement);
flag = 1;//flag变量的创建是为了表示鼠标的状态,0表示鼠标未点击该区域,1表示已点击
}
if(msg.message == WM_LBUTTONUP && flag == 1){//如果已经点击上述区域的话,鼠标抬起表示进入
(statement);
}
3.地图网格化模块
在制作网格游戏的时候,可以定义一个二维数组结构数据地图
map[row][column]来表示地图中的任意一个方格
struct map{
int type;
int frameIndex;
};
例如,可以用type来表示该格地图的状态,比如是空白,墙还是什么。在pvz中,每个格子都只能种一个植物,所以我们可以用数字编码植物,以type来表示。用数字来编码植物的动画帧数,以frameIndex表示。在pvz中,毁灭菇爆炸后会留下一个弹坑,这个弹坑也可以设计一个type编码来实现。