cocos2dx碰撞检测实现

来源:未知 责任编辑:责任编辑 发表时间:2013-12-06 08:43 点击:
在此场景中,我们假设有很多敌人和子弹,其中子弹可以击中敌人,并且碰撞后子弹和敌人都会随之消失。 p> 

p>首先,我们需要去追踪这些敌人和子弹。

p> 

p>我们可以为这两种物体添加tag,在这里我们给敌人添加tag=1,给子弹添加tag=2,。因为CCSprite继承自CCNode,因为已经有了setTag和getTag方法;我们可以通过这种方式来区分不同的精灵。

p> 

p>添加两个成员对象在HelloWorldScene.h中。用来分别存储存在的敌人和子弹。

p> 

p>[cpp] 

p>protected:  

p>    cocos2d::CCArray *_targets;  

p>    cocos2d::CCArray *_projectiles;  

p> 

p>在cocos2dx中,在构造函数中初始化这两个变量,在init()函数中new,在析构函数中release。

p> 

p>[cpp]  

p> // 初始化  

p> _targets = new CCArray;  

p> _projectiles = new CCArray;  

p>  

p> HelloWorld::~HelloWorld()  

p> {  

p>  if (_targets)  

p>  {  

p>    _targets->release();  

p>    _targets = NULL;  

p>  }  

p>  

p>  if (_projectiles)  

p>  {  

p>    _projectiles->release();  

p>    _projectiles = NULL;  

p>  }  

p>  // cpp不需要调用super释放,虚析构函数将会做这些事  

p>}  

p>  

p>HelloWorld::HelloWorld()  

p>:_targets(NULL)  

p>,_projectiles(NULL)  

p>{  

p>}  

p> 

p>现在更改addTarget()来添加一个新的敌人到targets数组中,并且把它的tag设置为1.

p> 

p>[cpp]  

p>// 添加到数组中  

p>target->setTag(1);  

p>_targets->addObject(target);  

p> 

p>更改一下ccTouchesEnded()来添加一个新的子弹到bullets数组中,并且设置它的tag为2.

p>[cpp] 

p>// 添加到_projectiles数组中  

p>projectile->setTag(2);  

p>_projectiles->addObject(projectile);  

p> 

p> 

p>接下来,更改如下的spriteMoveFinished()函数。这里我们将从相应的数组中移除一些精灵。

p> 

p>[cpp]  

p> void HelloWorld::spriteMoveFinished(CCNode* sender)  

p> {  

p>   CCSprite *sprite = (CCSprite *)sender;  

p>   this->removeChild(sprite, true);  

p>  

p>   if (sprite->getTag() == 1)  // target  

p>   {  

p>     _targets->removeObject(sprite);  

p>  }  

p>  else if (sprite->getTag() == 2) // projectile  

p>  {  

p>    _projectiles->removeObject(sprite);  

p>  }  

p>}  

p>下面的函数update()将会每帧被执行到一次,一般用来检测碰撞检测,可以移除掉碰撞的子弹和敌人。

p> 

p>在HelloWorldScene.h中声明它,在HelloWorldScene.cpp.定义它。

p> 

p>[cpp]  

p>void HelloWorld::update(float dt)  

p>{  

p>    CCArray *projectilesToDelete = new CCArray;  
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1