`
frank__wang
  • 浏览: 22308 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【cocos2d-x入门实战】微信飞机大战之九:碰撞检测

 
阅读更多


原文地址:http://blog.csdn.net/jackystudio/article/details/11917875

碰撞检测是整个游戏的重头戏,没有它,子弹和敌机只能是路人。。。虽然很重要,但实现起来确是很简单。


1.update函数

每个从CCObject继承的类都包含了一个update函数,它是一个内联虚函数,执行频率为每帧调用一次。

原型:

  1. virtualCCObject::update(floatdt);

开启方式:

  1. this->scheduleUpdate();
关闭方式:

  1. this->unscheduleUpdate();
有了这个update函数,我们就可以在GameLayer中对它进行重载,把我们每帧内要执行的动作放到update中,进行调用就可以了。


2.碰撞检测原理

那我们每帧内要做什么事呢?

我们先看一下游戏是什么?动画?其实不过是一张张快速变换的图片。比如我们设置60FPS,那么游戏就是一秒钟闪过60张图片,由于人眼的视觉残留效应导致看起来像是动画,因此游戏中的每一个动作我们可以认为是高速变化的静态的图片,而这个图片是以帧为单位。

所以我们可以在每一帧内进行碰撞检测。

原理:

主角飞机是一个精灵,也就是一张带alpha通道的PNG图,子弹也是,敌机同样也是,它们都是一块矩形区域,即便有的地方是透明的。所以碰撞检测就是在每一帧内判断多个不同类型矩形区域是否有相交,有即碰撞。


3.碰撞检测示例

这里以生命值最大的Enemy3来做示例。而敌机和主角的碰撞是一样的道理。主角的爆炸效果也是采用帧动画,和敌机爆炸是一致的,但是要注意,敌机一旦爆炸,要记得StopShoot。

  1. CCArray*bulletsToDelete=CCArray::create();//创建一个CCArray,用以存放待删除的子弹,也就是此帧中被检测到碰撞的子弹
  2. bulletsToDelete->retain();//必须调用retain,CCArray内部调用了autoRelease
  3. CCObject*bt,*et;
  4. //enemy3&bulletCheckCollosion
  5. CCARRAY_FOREACH(this->bulletLayer->m_pAllBullet,bt)//遍历所有子弹
  6. {
  7. CCSprite*bullet=(CCSprite*)bt;
  8. CCArray*enemy3sToDelete=CCArray::create();//创建一个CCArray,用以存放待删除的敌机,也就是此子弹击中的敌机
  9. enemy3sToDelete->retain();//调用retain
  10. CCARRAY_FOREACH(this->enemy3Layer->m_pAllEnemy3,et)//遍历所有敌机
  11. {
  12. Enemy3Sprite*enemy3=(Enemy3Sprite*)et;
  13. if(CCRect::CCRectIntersectsRect(bullet->boundingBox(),enemy3->boundingBox()))//检测碰撞,即矩形区域是否相交
  14. {
  15. //如果life>1,移除bullet
  16. if(enemy3->life>1)//因为Enemy3设置了生命值为5
  17. {
  18. enemy3->life--;
  19. bulletsToDelete->addObject(bullet);//把待删除子弹放入CCArray
  20. }
  21. //如果life==1,移除enemy3
  22. elseif(enemy3->life==1)//只剩一条命的时候,再碰撞就挂掉了
  23. {
  24. enemy3->life--;
  25. bulletsToDelete->addObject(bullet);//把待删除子弹放入CCArray
  26. enemy3sToDelete->addObject(enemy3);//把待删除敌机放入CCArray
  27. }
  28. //此时处在敌机爆炸动画阶段,敌机未消失,子弹还有打到的机会,所以不进行检测
  29. else;
  30. }
  31. }
  32. CCARRAY_FOREACH(enemy3sToDelete,et)//遍历所有此帧中碰撞死亡的敌机,必须是死亡
  33. {
  34. Enemy3Sprite*enemy3=(Enemy3Sprite*)et;
  35. this->enemy3Layer->enemy3Blowup(enemy3);//执行爆炸
  36. }
  37. enemy3sToDelete->release();//release
  38. }
  39. CCARRAY_FOREACH(bulletsToDelete,bt)//遍历所有此帧中碰撞的子弹
  40. {
  41. CCSprite*bullet=(CCSprite*)bt;
  42. this->bulletLayer->RemoveBullet(bullet);//执行移除
  43. }
  44. bulletsToDelete->release();//release

不过要注意的是,实际游戏如果只是简单的检测矩形区域,那么可能会出现子弹从敌机身边掠过,而敌机却挂了的情况,这不科学啊!这是因为敌机两侧的透明区域过大了,碰撞检测的是整个PNG图的大小,不知道这个图上哪些点有代表着飞机。

所以要根据游戏的实际情况来调整精灵矩形区域的大小以达到较好的游戏体验。

分享到:
评论

相关推荐

    cocos2d-x高仿微信打飞机

    【cocos2d-x高仿微信打飞机】是一款基于cocos2d-x游戏引擎开发的休闲射击游戏,模仿了微信内置的"飞机大战"。它为初学者提供了一个很好的实践平台,通过学习这款游戏的源代码,可以深入了解cocos2d-x引擎在实际项目...

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-x实战:C++卷(2版)源代码

    《Cocos2d-x实战:C++卷(2版)源代码》这本书是关于使用Cocos2d-x游戏引擎进行游戏开发的专业指南。Cocos2d-x是一个开源的、跨平台的游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言...

    Cocos2d-x 3.2 仿微信打飞机

    使用的cocos2d-x 3.2最新版本。 搜索了很久才搜索到完整的素材,空降物竟然也是黑白的,只好自己随便加了点颜色。重在练手,成功移植到了android真机。 详细内容,博客:...

    cocos2d-x微信飞机大战源码

    《cocos2d-x微信飞机大战源码解析与学习指南》 Cocos2d-x是一款强大的跨平台2D游戏开发框架,它基于C++,同时支持JavaScript和Lua等多种编程语言,广泛应用于移动游戏开发。本篇文章将深入探讨“微信飞机大战”这款...

    Cocos2d-x 3.1.1 微信打飞机源码

    通过研究这个Cocos2d-x 3.1.1的“微信打飞机”源码,开发者不仅可以了解游戏开发的基本流程,还能学习到Cocos2d-x框架的使用技巧,提升自己的游戏开发能力。同时,也可以根据源码进行二次开发,创造出更多富有创意的...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    同时,Cocos2d-x集成了Box2D物理引擎,使开发者能轻松实现物理效果,如碰撞检测、重力模拟等。 游戏中的音频管理也是不可或缺的一环。本书会介绍Cocos2d-x的音频API,包括音乐播放、音效处理以及音效资源的加载和...

    Cocos2d-x实战C++卷关东升著完整版pdf

    《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    3. **物理引擎**:介绍Cocos2d-x内置的Box2D物理引擎,用于模拟游戏中的碰撞检测和物理行为。 4. **事件处理**:讲解如何处理用户输入、触摸事件以及游戏内的各种交互事件。 5. **游戏逻辑**:通过实例解析如何...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    标题中提到了"Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整",这里面包含了几个关键知识点: 1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、...

    cocos2d-x实战 c++卷教程及完整源码

    cocos2d-x实战 c++卷教程及完整源码下载,使用最新cocos2d-x-3.14版本,在xcode7.3上已编译通过。 解决相关问题 1、解决源程序在高版本上无法编译问题 2、解决源程序中文注释部分,xcode上显示乱码问题 3、根据书籍...

    Cocos2d-x实战_Lua卷 _第2版

    《Cocos2d-x实战_Lua卷_第2版》是一本专为游戏开发者准备的指南,主要聚焦于使用Cocos2d-x框架与Lua语言进行游戏开发。Cocos2d-x是一个开源的游戏开发框架,它允许开发者用C++、Lua或者JavaScript编写游戏,并且可以...

    Cocos2d-x实战 JS卷

    4. **物理引擎**:了解Cocos2d-x内置的Box2D或Chipmunk物理引擎,如何模拟真实世界的物理行为,如碰撞检测和重力。 5. **事件处理**:掌握事件监听和响应机制,包括触摸事件、键盘事件以及自定义事件的处理,实现...

    cocos2d-x 3.2 仿微信的飞机大战

    使用的cocos2d-x 3.2最新版本。 搜索了很久才搜索到完整的素材,空降物竟然也是黑白的,只好自己随便加了点颜色。重在练手,成功移植到了android真机。 详细内容,博客:...

    《Cocos2d-x实战 Lua卷》源码.7z

    5. **动画与物理引擎**:Cocos2d-x提供了强大的动画支持和Box2D物理引擎,源码将展示如何用Lua编写复杂的动画序列,以及如何实现物理效果,如碰撞检测、重力等。 6. **游戏逻辑**:通过实际的游戏逻辑代码,可以...

    迷失航线-Cocos2d-x项目实战-射击类游戏-关东升

    在这个项目实战中,我们将深入探讨如何利用Cocos2d-x 3.2版本构建一款完整的射击游戏。 首先,Cocos2d-x的场景管理是游戏开发的基础。在《迷失航线》中,游戏会通过Scene对象来组织不同的游戏阶段,如主菜单、游戏...

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    基于cocos2d-x 的微信打飞机

    【基于cocos2d-x的微信打飞机】是一款利用cocos2d-x游戏引擎开发的移动游戏,其核心是利用cocos2d-x的技术来实现微信平台上的飞行射击类游戏,类似于经典游戏“打飞机”。cocos2d-x是一个开源的、跨平台的2D游戏开发...

    cocos2d-x入门讲解

    Cocos2d-x集成了Box2D物理引擎,可以处理碰撞检测、重力模拟等物理效果,使游戏更加真实。 七、脚本支持 Cocos2d-x提供Lua和JavaScript两种脚本语言支持,方便开发者进行逻辑编程,尤其适合快速原型开发和小型项目...

    cocos2d-x windows vs2010配置

    "cocos2d-x windows vs2010 配置详解" 本文将详细介绍如何在 Windows 环境下使用 Visual Studio 2010 配置 Cocos2d-x 游戏引擎。Cocos2d-x 是一个跨平台的游戏引擎,可以在多种平台上运行,包括 Windows、Mac OS X...

Global site tag (gtag.js) - Google Analytics