用GMS2制作一款《坦克大战》游戏03

27일 전

上两篇文章介绍了用《GameMaker Studio 2 Mobile》制作一款《坦克大战》敌人坦克和玩家的坦克,那么他们所发射的子弹是如何形成的呢?伤害又是如何判断的呢?接下来我将给你们讲解一下,如何制作一款子弹:

fuweifhfkhsdkhfsjkldhflsdfsdgggsrrrrrrrrrrerwtfwsw4wsfrw43rwerfsr34rwsrwsfrs43wsrf.jpg

还是熟悉的套路,在精灵里添加子弹的贴图,然后再新建一个物体,为名为“子弹”,导入贴图。然后新建事件“创建”,并在里面添加代码

timer=100;

这是一个子弹存在的时间,因为我们总不能让子弹一直存在,当它飞行一段距离后就会消失,而这个时间就是计算值。

好了,现在继续添加“步”事件,代码如下:

timer-=1;//时间减1
if timer<=0 instance_destroy()//如果时间小于等于零,子弹消失

那么,以上就是子弹在没有击中敌人的情况下,将在飞行一段时间后消失的代码,其实很简单,是吧!?

545444445464564564564564645365436456464645.jpg

那么,如果子弹碰到敌人或者其它物体又如何判断呢?

我们再添加一个“碰撞”事件,选择对象为之前创建的“敌人坦克”,然后判断,碰撞后该如此处理,代码如下:

var Shanghai;//临时变量,伤害数值
with(other)
{
Shanghai=floor((player_GJ2-sfyl)+floor(random(5));//伤害=(玩家攻击力-敌人防御力)+5以内的随机数(因为我不想每次伤害都一样,所以加个随机数)
if(Shanghai>0){hp-=Shanghai;}else{Shanghai=1;hp-=1;}//如果伤害大于0,那么敌人的HP减去伤害;如果不是就用敌人的HP减,1,也就是说保底伤害是1
diaoxue=Shanghai;//这里是设定一个伤害数值
instance_create_depth(x,y,-1,obj_boom);//显示一个爆炸动画,需先行添加
instance_create_depth(x-10,y,-1,obj_diaoxue);//显示一个伤害数值
audio_play_sound(snd_boom,0,0);//播放爆炸音效,需另行添加
}
instance_destroy();//然后子弹消失

qwrtiweutriewtreowytiowytowtpwtupw.jpg

这样,子弹对敌人的伤害公式也完成了,还差什么呢?还却对砖块的碰撞代码,这就简单多了,因为不用判断伤害值嘛!还是添加“碰撞”事件,碰撞对象为“砖块”

instance_create_depth(x,y,-1,obj_boom3)//爆炸动画
with(other)instance_destroy();//被碰撞物体消失
instance_destroy();//子弹消失

然而,游戏墙是不能被毁灭的,比如游戏四周的边墙,所以碰撞代码里取消被碰撞物体消失这条代码就可以了

instance_create_depth(x,y,-1,obj_boom3)//爆炸动画
instance_destroy();//子弹消失

3252345ewrtewtreywrrtuy45rywe4y345y454.jpg

OK,一个游戏基本是完成了。你说墙怎么弄?墙是一个固定物体,由于没有行动和HP,所以直接添加物体就可以了。至于墙、水、树的区别在于它们所处于的图层高度,玩家坦克、敌人坦克和墙处于同一图层,水处于下一个图层所以坦克会踩在水上,树会遮挡坦克,所以树在上一个图层,很简单吧。

wqetrytuyytityturetwueotwerytowrytyrweotwertewr.jpg

当然,如果你想制作一堵需要打数发炮弹才能毁灭的墙,那么给墙加个HP,碰撞代码如敌人的坦克一样就可以了。

erewtwerutoiwertwyequrtuewoyrwyiqysiaa.jpg

现在,你只需要在房间板块里新建一个房间,在把墙、水、草等原件放入地图里,再设置玩家的初始位置,游戏的大框架就完成了。接下来,如何让敌人出现呢?在《坦克大战》敌人会在特定时间、特定的位置出现,那么我们只需要新建一个物体,“创建”事件:

timer =100;//时间

添加“绘制GUI”事件:

if(player_HP<=0)//如果玩家HP小于等于0就退出下列代码
{
   exit;
}

if(timer>0)timer -=1;//时间减1

//**********************************************1

if(stage=1){//关卡1

if(timer=0 && instance_number(obj_diren_laoda)<4 && jiposhu<20)//如果时间等于0,在场敌人小于4,击破数小于20
{
    switch(irandom(5))//随机数
   {
      case 0:{instance_create_depth(x+32,y+32,200,obj_diren1)}break;//0生成速度型坦克
      case 1: case 2: case 3: case 4: case 
5:{instance_create_depth(x+32,y+32,200,obj_diren0);}break;//1-9生成普通坦克
   }
   timer =200+ irandom(200);
}
}

看,这样就搞定了。而且会随机生成不同的坦克类型,当然,这也需要先行添加不同类型的敌人坦克才行哦!

关于胜利条件的判断,我们可以在第一个房间里的“全局变量”里添加一个“击破数”,我们回去看刚才生成敌人的代码里有一条“jiposhu<20”,意思是击破数少于20辆,就会继续生成敌人。所以胜利条件可以设置为,满足击破数的情况下,就跳到下一个房间。

至此,整个游戏的框架就完成了。当然你可以自行添加各种牛叉的设定,各类敌人、各类子弹甚至BOSS都行。当你能独立将整个框架架设起来的时候我相信其它都不是难事。

那么用《GameMaker Studio 2 Mobile》制作一款《坦克大战》的教程也就结束了!

如果有什么不懂的地方,可以在留言处提出,再见~

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
STEEMKR.COM IS SPONSORED BY
ADVERTISEMENT
Sort Order:  trending