Cocos2d-x 3.3 版本和 3.4 版本到底有啥区别呢?

最近拿flappy bird的代码在学习cocos2d-x, 开发环境:win7+cocos2d-x 3.4+VS2013, 代码码完后,开始运行还正常,但是突然的(代码没改) ,再运行的时候就报: Microsoft C++ exception: Concurrency::scheduler_resource_allocation_error at memory location 0x54CAF31C.
Unhandled exception at 0x76F2C41F in CopyBirdGame001.exe: Microsoft C++ exception: Concurrency::scheduler_resource_allocation_error at memory location 0x54CAF31C.

同样的代码,在开发环境:win7+cocos2d-x 3.3+VS2013 下运行正常。

仔细对比了一下代码,没有差别,确定不会代码的问题,而且一哥们把代码拿到Xcode+cocos2d-x 3.3环境下运行,居然还报了个野指针的错误。被搞蒙了,这到底是怎么回事,是cocos2d版本的问题吗?

贴出代码勾引一下:

void LoadingScene::onEnter() {

CCLOG(“LoadingScene::onEnter()”);

auto visibleSize = Director::getInstance()->getVisibleSize();

auto origin = Director::getInstance()->getVisibleOrigin();

//没有添加层,直接就在场景中添加精灵 //添加启动动画
auto splashBg = Sprite::create(“splash.png”); //就是这里,在cocos 3.4 + VS2013的时候,splashBg创建完居然是空的,导致下一行代码报错。但是在cocos 3.3+ VS2013环境下又是运行正常的
splashBg->setPosition(Point(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2 - 50));

this->addChild(splashBg);

auto logo = LabelTTF::create(“by Tashaxing”, “Arial”, 20); logo->setPosition(Point(origin.x + visibleSize.width / 2, visibleSize.height / 2 - 50));

this->addChild(logo);

//加载回调函数,用异步加载纹理效果
Director::getInstance()->getTextureCache()->addImageAsync(“game.png”, CC_CALLBACK_1(LoadingScene::loadingCallBack, this));

}

算了,自己总结一下吧。

仅从我这种初学者来讲,3.3版本和3.4版本目前看没什么分别,但是值得注意的是,和3.0版本还是有点区别的,就是在Xcode+3.3/3.4环境下,资源文件需要放在/Reources/res下,程序才能正常运行,如果放在/Resources目录下,程序会挂,但是不报错,让人看得莫名其妙的。但是在VS2013+3.3/3.4环境下,资源文件放在/Resources目录下就没有问题,能够正常运行。

另,在沙发上提到的 auto splashBg = Sprite::create(“splash.png”); 执行完splashBg为空,根本原因就是老子把 init()方法中判断是否调用了父类的init()方法的判断写反了,真是栽在这种低级小错误上,折腾了我两天了:6:,所以赶紧吃了顿好的压压惊:7:

完了,就这样。

Xcode+3.3/3.4环境下,资源文件需要放在/Reources下就可以了啊= =!只是要再把他们拖拽到XCODE里,如果有子文件夹的话,还要再clean一下。

那为什么我把资源文件放在/Resources下,程序就挂了呢?还报的野指针错误。但是我把资源文件拷贝到/Resources/res 下面之后,就妥了。难道还有什么别的设置吗?

而且在3.3和3.4创建项目的时候,它自己在Resources下面创建了res子目录,不会没有目的的吧?

额,我好好的。你放倒目录下后,有没再手动拖拽到Xcode里面?

目测是添加进工程的时候没有选择 reference那个选项导致的

对了,你这么一说我想起来了,我确实没有在xcode里面把它们添加到Resources里面,忘了这一步了。

但是拷贝到res目录下的资源文件,它自己就出现在xcode里面了。看来3.3和3.4创建res这个目录还是有目的的。

不是的,应该就是abc88798说的,我没有把资源文件拖到Xcode里,所以也不存在选reference选项了。不过一般我要是添加文件到工程里,我都会勾选那个选项的。:875:

经过几次试验,最后确定一下:

1、将资源文件拷贝到/Reources目录下,确实需要在Xcode中添加一下;

2、如果将资源文件拷贝到 /Resources/res目录下,就不需要在Xcode中做添加的动作了,直接就可以执行了。