版权声明:本文为博主原创,如需转载请注明出处。
写在前面
本文件只是将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() | 是 |