版权声明:本文为博主原创,如需转载请注明出处。
写在前面
本文件只是将Cocos2dx 封装为一个 UIView,方便直接添加使用
使用的 coco2d-x 版本为 3.13.1
添加过程
首先将 ~/cocos2d/build/cocos2d_lib.xcodeproj 添加到工程中

然后对照new出来的工程,修改配置:

然后添加两个 Header Search Paths,同样对照样本工程
设置TARGETS中Header Search Paths

PROJECT中设置Header Search Paths,相对路径

设置预处理的宏定义,Debug和Release


修改Custom Compiler Flags

至此,不出意外编译可以成功了。
设置view
然后在CocosViewController(我自己建立的测试界面)中设置弹出HelloWorld界面,HelloWorld界面的两个类 AppDelegate 和 HelloWorldScene要添加到工程中。
注意这个文件是C++混编,所以
CocosViewController.m文件要改后缀为CocosViewController.mm
1 |
|
此时就可以重复开启关闭cocos动画界面了。
释放cocos单例
检查单例
这里先对所有的cocos2dx中的单例进行检查,主要是想用Director销毁其他的单例,经过检查的结果也证明了王哲说的:用Director来管理项目中的单例,具体释放在上面的 destroyCocosView 方法中。即为:
1 | - (void)destroyCocosView |
下面为检查结果表格:
| 单例 | 是否被cocostudio释放 | 启动时是否被实例化 |
|---|---|---|
| ArmatureNodeReader::destroyInstance() | 是 | 否 |
| ButtonReader::destroyInstance() | 是 | 否 |
| ActionManagerEx::destroyInstance() | 是 | CCActionNode 和 CCSGUIReader |
| BoneNodeReader::destroyInstance() | 否 | 否 |
| ActionTimelineCache::destroyInstance() | CSLoader销毁时会调用这个销毁 | CSLoader |
| Animation3DCache::destroyInstance() | 否 | 否 |
| AnimationCache::destroyInstance() | 是 | CCNodelLoader 和 CCSprite |
| ScriptEngineManager::destroyInstance() | 否 | 有一堆类用到这个实例,但没有被销毁,但可以用Application销毁 |
| PoolManager::destroyInstance() | 否 | 同上 |
| ArmatureDataManager::destroyInstance() | 是 | 否 |
| AsyncTaskPool::destroyInstance() | 是 | 其他3个类有用到 |
| Configuration::destroyInstance() | 是 | 二十几个类用到 |
| FileUtils::destroyInstance() | 是 | |
| GLProgramCache::destroyInstance() | 是 | |
| GLProgramStateCache::destroyInstance() | 是 | |
| NodeLoaderLibrary::destroyInstance() | 否 | 否 |
| __NotificationCenter::destroyInstance() | 否 | 否 |
| GUIReader::destroyInstance() | 是 | 十几个类调用 |
| Sprite3DCache::getInstance() | 否 | 自己调用 |
| Sprite3DMaterialCache::destroyInstance() | 否 | |
| SpriteFrameCache::destroyInstance() | 是 | |
| SceneReader::destroyInstance() | 是 | |
| DictionaryHelper::destroyInstance() | 是 | |
| UserDefault::destroyInstance() | 是 | |
| CheckBoxReader::destroyInstance() | 是 | |
| NodeReader::destroyInstance() | 是 | |
| SingleNodeReader::destroyInstance() | 是 | |
| SpriteReader::destroyInstance() | 是 | |
| ParticleReader::destroyInstance() | 是 | |
| GameMapReader::destroyInstance() | 是 | |
| ProjectNodeReader::destroyInstance() | 是 | |
| ComAudioReader::destroyInstance() | 是 | |
| WidgetReader::destroyInstance() | 是 | |
| CheckBoxReader::destroyInstance() | 是 | |
| ImageViewReader::destroyInstance() | 是 | |
| TextBMFontReader::destroyInstance() | 是 | |
| TextReader::destroyInstance() | 是 | |
| TextFieldReader::destroyInstance() | 是 | |
| TextAtlasReader::destroyInstance() | 是 | |
| LoadingBarReader::destroyInstance() | 是 | |
| SliderReader::destroyInstance() | 是 | |
| LayoutReader::destroyInstance() | 是 | |
| ScrollViewReader::destroyInstance() | 是 | |
| PageViewReader::destroyInstance() | 是 | |
| ListViewReader::destroyInstance() | 是 | |
| Node3DReader::destroyInstance() | 是 | |
| Sprite3DReader::destroyInstance() | 是 | |
| UserCameraReader::destroyInstance() | 是 | |
| Particle3DReader::destroyInstance() | 是 | |
| CSLoader::destroyInstance() | 是 | |
| FlatBuffersSerialize::destroyInstance() | 否 | 一堆调用这个 |
| GameNode3DReader::destroyInstance() | 否 | 否 |
| HttpClient::destroyInstance() | 否 | 否 |
| Light3DReader::destroyInstance() | 否 | 否 |
| JsonLocalizationManager::destroyInstance() | 否 | 否 |
| BinLocalizationManager::destroyInstance() | 否 | 否 |
| ObjectFactory::destroyInstance() | 否 | 是 |
| SkeletonNodeReader::destroyInstance() | 否 | 否 |
| SocketIO::destroyInstance() | 否 | 否 |
| TabControlReader::destroyInstance() | 否 | 否 |
| TabHeaderReader::destroyInstance() | 否 | 否 |
| TabItemReader::destroyInstance() | 否 | 否 |
| TriggerMng::destroyInstance() | 是 |