关于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));
  }
}

原文地址:https://www.cnblogs.com/HangZhe/p/5700265.html