当前位置: 首页 > 工具软件 > Cocos2D-ObjC > 使用案例 >

cocos2d-x 2.0.3 升级到 cocos2d-x 3.13

单于承
2023-12-01

1.去掉CC
CCControl
CCControlButton
CCScale9Sprite
CCNode
CCTouch

2.修改名字
CCControlEvent,Control::EventType
CCControlEventTouchDown,Control::EventType::TOUCH_DOWN
CCControlEventTouchDragInside,Control::EventType::DRAG_INSIDE
CCControlEventTouchDragOutside,Control::EventType::DRAG_OUTSIDE
CCControlEventTouchDragEnter,Control::EventType::DRAG_ENTER
CCControlEventTouchDragExit,Control::EventType::DRAG_EXIT
CCControlEventTouchUpInside,Control::EventType::TOUCH_UP_INSIDE
CCControlEventTouchUpOutside,Control::EventType::TOUCH_UP_OUTSIDE
CCControlEventTouchCancel,Control::EventType::TOUCH_CANCEL
CCControlEventValueChanged,Control::EventType::VALUE_CHANGED

CCTOUCHBEGAN,EventTouch::EventCode::BEGAN
this->getChildren()->objectAtIndex(i),this->getChildren().at(i)
CCEGLView::sharedOpenGLView(),Director::getInstance()->getOpenGLView()

Control::State
CCControlStateNormal,Control::State::NORMAL
CCControlStateHighlighted,Control::State::HIGH_LIGHTED
CCControlStateDisabled,Control::State::DISABLED
CCControlStateSelected,Control::State::SELECTED

kCCTableViewFillTopDown,TableView::VerticalFillOrder::TOP_DOWN
kCCScrollViewDirectionVertical,ScrollView::Direction::VERTICAL

ControlButton::setZoomFactor,ControlButton::setScaleRatio

CCScriptEngineManager::sharedManager()->getScriptEngine()->executeNodeEvent,ScriptEngineManager::sendNodeEventToLua(this, kWndOnShowFinished);
CCTextureCache::sharedTextureCache()->GetFileNameByTexture,TextureCache::getInstance()->getTextureFilePath

setObjName,setName
getObjName,getName
retainCount(),getReferenceCount()
"EnterTransitionDidFinish","enterTransitionFinish"
"ExitTransitionDidStart","exitTransitionStart"

old,new(c++),new(lua)
CCPoint,Vec2,cc.p
CCRect,Rect,cc.rect
CCSize,Size,cc.size


android 编译
-------------------------------------------------------------------------------
1.NDK路径配置
NDK_MODULE_PATH_=C:\projects\Cocos2d-x\cocos2d-x-3.13;C:\projects\Cocos2d-x\cocos2d-x-3.13\cocos;C:\projects\Cocos2d-x\cocos2d-x-3.13\external


2.error: 'struct lconv' has no member named 'decimal_point'
在llex.c文件static void trydecpoint函数中的ls->decpoint = (cv ? cv->decimal_point[0] : '.');,修改成ls->decpoint = ('.');
在llex.c文件static void trydecpoint函数中的struct lconv *cv = localeconv注释。


3.maven报错非法字符:\65279 错误
在 IDE中修改提示有非法字符的java文件的编码为:ISO-8859-1 然后 我们就可以看到java文件的开头有些乱码,删除它,就是它在捣乱。再重新编译便可解决。


4.因为C++11字面量的支持导致""变量连接解析成字面量引起编译失败。
字符串与变量之间加空格来解决,如#define AA(A) "" A


5.cocos command
cocos new dwc -p com.mas.xhgame.BDDKdj -l cpp -d c:\projects
cocos compile -p android --ap android-17
cocos run . -p android --ap android-17 -q


6.项目支持cocos命令
CPP_SAMPLES = ['cpp-empty-test']
target_proj_path_map = {"cpp-empty-test": "tests/cpp-empty-test"}


7.iconv库包含问题
NDK自带的iconv的 查看 android-ndk-r9d/sources/android/support/include/iconv.h
所以win32包含external\win32-specific\icon\include;
android不带路径直接包含iconv.h, android.mk添加
LOCAL_WHOLE_STATIC_LIBRARIES += android_support
$(call import-module,android/support)


8.JNI DETECTED ERROR IN APPLICATION: jmethodID was NULL
java没执行或者xx.so未调用又或者写的jNI和JAVA有问题。还有种可能调用时机,【cocos2d-x 2.0.3中我们项目在AppDelegate构造函数调用正常,3.0则找不到函数程序直接崩溃。调用位置放到applicationDidFinishLaunching函数后便一切正常】


9.NDK的选择
编译 cocos2d-x 使用 android-ndk-r12b
生成 genbindings.py 类型文件 使用 android-ndk-r10c



ios compile
-------------------------------------------------------------------------------
1. enable bitcode
BITCODE 允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到APP store上。但是引用第三方库而库又不支持bitcode就会导致编译失败,这时我们只需要关闭就可以。
http://www.cocoachina.com/bbs/read.php?tid-334003.html


2.'xx' hides overloaded virtual function
解决方法一:和基类函数名一致。
解决方法二:派生类中增加 using Base::函数名;
解决方法三:Overloaded Virtual Functions 选择 No
http://stackoverflow.com/questions/18515183/c-overloaded-virtual-function-warning-by-clang


3. targeted device family
1 2 1,2 目标设备


4. Framework中的头文件找不到
在Search Paths—》Framework Search Paths 设置文件所在路径


5. 同时有.cpp和.mm的文件ios中只需要添加.mm文件


6. ‘XXX’, referenced from:
 如果是函数名看对就的cpp是否加到工程,如果库按下方式检查是否支持
命令行中> lipo 库拖进来(完整路径) -info
这样可以查看是否支持模似器或者真机。


7.2dx-lua Other Linker Flags 设置成 -ObjC 真机编译报错"_GCControllerDidDisconnectNotification"
增加库:GameController.framework,MediaPlayer.framework(可选)
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。 
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载
http://www.tuicool.com/articles/iYjiIn


8."std::istream::sync()", referenced from:  "std::ios_base::Init::~Init()", referenced from:
包含libstdc++.6.0.9.tbd


参考文献

修改内容:https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md

C++类导出到LUA:http://www.cocoachina.com/bbs/read.php?tid=226362

C++类导出到LUA:http://www.cocoachina.com/bbs/read.php?tid=196416

lua-binding导致程序运行崩溃:http://www.cocoachina.com/bbs/read.php?tid=226180&page=1#1042506


正则表达式:http://shouce.jb51.net/python/

正则表达式:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html


 类似资料: