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+lua[2]](/uploads/allimg/131030/110J64609-0-lp.jpg)








