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;
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>