cocos2d-x-3.0 alpha1与C++11练习五:飞镖忍者,如何检测碰撞
来源:未知 责任编辑:责任编辑 发表时间:2014-01-20 07:51 点击:次
英雄现在可以发射子弹了,但仅仅只是装饰而已,如何才能杀掉怪物呢?将依碰撞检测来实现这一效果。
p>
p>1,缓存怪物与子弹
p>首先,跟踪怪物和子弹是必需的。在游戏中,我们为这两种精灵加以不同的tag来区分它们。当tag=1时,表示这是怪物,而tag=2时,则表示这为子弹。由于在CCNode里面有m_nTag这个成员变量,并且有setTag和getTag方法,因此CCSprite就继承了这些方法,我们可以利用之。
p>
p>在HelloWorldScene.h中,把以下两个成员变量加入到HelloWorld下,这两个成员变量用于缓存现有的怪物和子弹:
p>
p>
p>protected:
p> cocos2d::Array *_targets;
p> cocos2d::Array *_projectiles;
p>
p>
p>在HelloWorldScene.h中,声明构造函数与析构函数:
p>
p>
p>HelloWorld();
p>~HelloWorld();
p>接着,需要在init中初始化这两个Array变量:
p>
p>
p>...
p> this->_targets = Array::create();
p> this->_projectiles = Array::create();
p>...
p>
p>
p>之后,在构造函数中初始化这两个变量,并在析构函数中release 它们。
p>
p>
p>
p>HelloWorld::HelloWorld(){
p> _targets = NULL;
p> _projectiles = NULL;
p>}
p>HelloWorld::~HelloWorld(){
p> CC_SAFE_RELEASE_NULL(_targets);
p> CC_SAFE_RELEASE_NULL(_projectiles);
p>}
p>
p>
p>现在可以修改addTarget(),把新目标添加到目标数组中,并设置其tag为1,并在lambda中作相应逻辑移除:
p>
p>
p>...
p> FiniteTimeAction *actionMoveDone = CallFuncN::create(
p> [this](Node *sender)->void{
p> //std::cout << "remove target" << std::endl;
p> <span style="color: #ff6600;">this->removeChild(sender);
p> _targets->removeObject(sender);</span>
p> });
p> target->runAction(Sequence::create(actionMove,actionMoveDone, NULL));
p>
p> <span style="color: #ff6600;">target->setTag(1);
p> _targets->addObject(target);</span><br>...
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>