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; 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(吃植物)绘制吃植物时的动画。至于状态的判断,将在以后介绍。
具体请点击这里