7.植物与僵尸的动画及绘制

HJ Lv2

7.植物和僵尸图片的绘制及动画

植物动画

这里的关键点是动画的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
void drawPlant() {
for (int i = 0; i < 16; i++) {
if (zb[newplant[i].gx - 1][newplant[i].gy - 1] > 0) {//如果有植物
newplant[i].nowpic = (newplant[i].nowpic == (indexnum[newplant[i].type] - 1) || newplant[i].nowpic < 0) ? 1 : newplant[i].nowpic + 1;
if (newplant[i].type == 1) {
putimagePNG(newplant[i].x, newplant[i].y, &sunflowerz[newplant[i].nowpic]);
}
if (newplant[i].type == 2) {
putimagePNG(newplant[i].x, newplant[i].y, &peashooterz[newplant[i].nowpic]);
}
}
}
}

在这里先遍历所有的植物(这里的16实际是15),如果位置有植物,则绘制植物。需要注意的是,这里的:

1
newplant[i].nowpic = (newplant[i].nowpic == (indexnum[newplant[i].type] - 1) || newplant[i].nowpic < 0) ? 1 : newplant[i].nowpic + 1; 

表示如果当前序列帧为图片最后一张或者小于0就将当前序列帧变为1,否则当前序列帧加1.(这里需要注意数组角标和实际图片张数的关系)
随后的两个if语句判断当前植物种类,如果类型为1,绘制向日葵,否则绘制豌豆射手。

僵尸动画

同理,僵尸的绘制也是如此

1
2
3
4
5
6
7
8
9
10
11
12
13
void drawZombies() {
switch (zombielist->status) {
case 1:
zombielist->nowpicofwalk = zombielist->nowpicofwalk == 21 || zombielist->nowpicofwalk < 1 ? 1 : zombielist->nowpicofwalk + 1;
//大于总数或者小于1设置为1
putimagePNG(zombielist->x, zombielist->y, &zombiez[zombielist->nowpicofwalk]);
break;
case 2:
zombielist->nowpicofattack = zombielist->nowpicofattack == 20 || zombielist->nowpicofattack < 1 ? 1 : zombielist->nowpicofattack + 1;//同上
putimagePNG(zombielist->x, zombielist->y, &attackz[zombielist->nowpicofattack]);
break;
}
}

如果当前僵尸的状态为1(走路)绘制走路时的动画,为2(吃植物)绘制吃植物时的动画。至于状态的判断,将在以后介绍。
具体请点击这里

此页目录
7.植物与僵尸的动画及绘制