学习cocos2d-x一段时间了,最近几天模仿捕鱼达人,前期由于自己没有分层(mvc),导致后面去更改的时候,麻烦多多!
当我按下暂停的时候,弹出菜单的时候遇到麻烦了,炮台和屏幕依然能够触摸(既然是暂停,当然是停止一切),这个是由于我没有分层的原因,故单独的新建一个MenuLayer,继承CCLayer 在init方法中填上这句
1、CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority, true);
第二个参数值越底(kCCMenuHandlerPriority = -128; ),他的优先权越高,即先接受到触摸事件,第三个参数 表示将当前事件被当前层吞并,其他对象自然不能接收到触摸,
2、实现响应的4个方法;
3、 恢复游戏的时候,最后的加上这句 CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);否则将会出现点击屏幕没反应;
以上1,2,3可以发现bug消失了,只能呵呵;
其他意外收获,暂停:,恢复
CCDirector::sharedDirector()->pause();
CCDirector::sharedDirector()->resume();
这个更有趣,在当前层中,怎么去获取其他层中的精灵
CCScene *scene= CCDirector::sharedDirector()->getRunningScene();
//这个是获取暂停精灵,让他显示
scene->getChildByTag(setupTag)->setVisible(true);
在获取子弹与鱼相交的代码
void StartScene::isInsect()
{
CCObject *fish=NULL;
CCObject *bullet=NULL;
CCARRAY_FOREACH(_fishArray, fish)
{
CCSprite *fish_= dynamic_cast<CCSprite *>(fish);
CCRect fishRect=CCRectMake(fish_->getPosition().x ,fish_->getPosition().y, fish_->getContentSize().width
, fish_->getContentSize().height);
CCARRAY_FOREACH(_bulletArray, bullet)
{
CCSprite *bullet_=dynamic_cast<CCSprite *>(bullet);
CCRect bulletRect=CCRectMake(bullet_->getPosition().x, bullet_->getPosition().y, bullet_->getContentSize().width, bullet_->getContentSize().height);
if (fishRect.intersectsRect(bulletRect))
{
......................
//下面我可以直接移除并没有出现,不能进行修改,删除,只能创建中间临时数组,然后在临时数组中删除,反正我这里没有报错
this->addChild(fishnet);
this->removeChild(bullet_);
_fishArray->removeObject(fish_);
_bulletArray->removeObject(bullet_);
}
}
}
}