关于Cocos2d-x程序运行时候提示关闭程序的框框的解决方法
1.这个情况是资源没有被加载的表现
如果AppDelegate.cpp里面没有文件索引的语句 FileUtils::getInstance()->addSearchPath("res");,就更加说明是资源找不到的问题
解决方法
把资源直接复制在Resources文件的根目录下,不要放在Resources/Res目录下。
2.可能是实例化对象类的init方法中没有重写父类的init方法
解决方法
在实例化对象类的init方法中写
Node::init()
Sprite::init()
3.可能是所要使用的资源文件(图片,声音等等)没有在Resources文件夹目录下
解决方法
认真确认资源信息,有可能是资源的文件名写错
4.可能是还没有设置myHero->setPhysicsBody(),就使用myHero->getPhysicsBody(),就会出现关闭程序的框框
解决方法
认真寻找myHero->getPhysicsBody()的句子,在这之前必须有一句myHero->setPhysicsBody()来设置它的物理刚体,一般都是myHero写错成其他名字导致系统找不到这个其他名字的PhysicsBody所引发的错误
5.可能是已经在.h文件中定义类型的变量,在.cpp中又用auto定义了一遍,这个有时候也造成系统输出:读取位置 0x0000039C 时发生访问冲突等错误
.h文件中
Sprite *confirm;
.cpp文件中
auto confirm = Sprite::create();
解决方法
把auto关键词去掉
6.可能是还没定义节点的大小(或者其他变量的某个属性),就先使用
sprite->getContentSize();
这种情况下也会出现框框
7.可能是语句执行顺序有问题,比如我把
hero_life--;---语句1
this->runAction(Sequence::create(hurt, moveTo, call1 , call2,NULL));---语句2
写成
this->runAction(Sequence::create(hurt, moveTo, call1 , call2,NULL));
hero_life--;
结果动作还没执行完突然玩家强制断了动作,导致必须执行hero_life--;没有执行到,漏执行了一次。但是
gamecontroller->onHurt(); //里面包含了语句1和语句2
cutLife(); //消除一个代表生命的爱心
却把cutLife();执行了,就会出现主角还没死但是代表生命的爱心已经全部消失了。
这时候,再进行碰撞,生命值hero_life终于满足死亡的标准,但是多执行了一次cutLife(),而cutLife()里面放爱心精灵的数组已经空了,这时候再去删除节点和删除数组元素就会出现停止运行的框框。
其实最好的方法是在GameScene.cpp的init方法中先获得主角的生命值_heroLife,再在碰撞检测方法中这样写
if (tag1 == HERO_TAG)
{
_heroLife--;//先减1,确保不会因为动作执行没完导致没有执行减1的操作
cutLife();//把爱心去除
gamecontroller->onHurt();//播放受伤动画
if (_heroLife < 1)//判定死亡
{
this->unscheduleUpdate();
gcs.clear();
auto dir = Director::getInstance();
dir->getEventDispatcher()->removeEventListener(contactListener);
dir->replaceScene(QuestionScene::createScene(_heroCount, 20));
}
}