超级玛丽制作揭秘10子弹的显示和帧的刷新

 感谢大家的支持,这些代码有很大优化的余地,有些代码甚至笨拙。我尽量讲清楚我写时的思路。今天讲子弹的显示和动画帧的刷新,这个思路,可以应用的其他精灵上。
上次讲所有的子弹存储到一个数组里。用一个游标(数组下标)表示新生产的子弹存储的位置。设数组为a,长度为n。游戏开始,一个子弹存储在a0,然后是a1,a2,...,a(n-1).然后游标又回到0,继续从a0位置存储.数组长度30,保存屏幕上所有的子弹足够了.

子弹的显示功能由图像层完成.如同图像处理中讲的.显示一个子弹(所有图片都是如此),只需要子弹坐标,子弹图片id,图片帧. 函数如下:
void GAMEMAP::ShowAniObj(MYANIOBJ & bmobj)
代码部分:
//显示子弹,魔法攻击
 for(i=0;i<MAX_MAP_OBJECT;i++)
 {
  if (FireArray[i].show)
  {
   ystart=FireArray[i].y;
   xstart=FireArray[i].x;
   
   switch(FireArray[i].id)
   {
   case ID_ANI_FIRE:
    bmobj.DrawItem(xstart,ystart,FireArray[i].id,FireArray[i].iframe);
    break;
子弹图片显示完成.游戏中,子弹是两帧图片构成的动画. 动画帧是哪里改变的呢?
刷新帧的函数是void GAMEMAP::ChangeFrame(int itimeclip)
游戏中,不停地调用这个函数,刷新各种动画的当前帧.其中子弹部分的代码:
//子弹,攻击控制
 for(i=0;i<MAX_MAP_OBJECT;i++)
 {
  if(FireArray[i].show)
  {
   switch(FireArray[i].id)
   {
  default:
    FireArray[i].iframe=1-FireArray[i].iframe;
    break;
   }
  } 
 }
子弹的动画只有两帧.所以iframe只是0,1交替变化.至此,子弹在屏幕上显示,并且两帧图片不停播放.
子弹和小怪碰撞, 是游戏中的关键逻辑.网游里也是主要日常工作, 打怪. 消灭小怪, 也是这个游戏的全部乐趣, 当然,这是在我下一个版本的游戏没有开发出来的时候.我预计要加入更多的动态元素, 更大的地图. 只是这个计划被现在的工作搁置了. 那么, 这个关键的碰撞检测, 以及碰撞检测后的逻辑处理, 是怎样的呢? 且听下回分解.
附:
超级玛丽第一版源码链接:http://download.csdn.net/source/497676
超级玛丽增强版源码链接:http://download.csdn.net/source/584350

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值