未志

Cocos2d-x 踩坑之路

小白学习新知识的路上,总会踩到各种各样大大小小的坑。特别是那种小坑花了你一天,甚至几天的时间时,除了 F**k My Life 还能怎么样?

触摸、鼠标事件名称之坑

问题:触摸、鼠标事件不响应(Native 应用)

原因:Cocos2d 2.1 修改了 isTouchEnabledisAccelerometerEnabledisMouseEnabledisKeyboardEnabled 事件名,去掉了前面的 is。Cocosbuilder 生成的 CCB 文件中的事件属性值顺势改了过来了。巴特,Cocos2d-x 没改,依然在使用 is*,这是有多么坑爹啊!!!自家的 CocosStudio 还不太成熟哇,跟着你老爹走不好么,幸运的事,修复起来还是简单的。

解决方法

打开 {cocos2d-x-source-path}/extensions/CCBReader/CCLayerLoader.cpp,将

#define PROPERTY_TOUCH_ENABLED "isTouchEnabled"
#define PROPERTY_ACCELEROMETER_ENABLED "isAccelerometerEnabled"
#define PROPERTY_MOUSE_ENABLED "isMouseEnabled"
#define PROPERTY_KEYBOARD_ENABLED "isKeyboardEnabled"

替换为

#define PROPERTY_TOUCH_ENABLED "touchEnabled"
#define PROPERTY_ACCELEROMETER_ENABLED "accelerometerEnabled"
#define PROPERTY_MOUSE_ENABLED "mouseEnabled"
#define PROPERTY_KEYBOARD_ENABLED "keyboardEnabled"

JS Controller 与 Custom class 之坑

错误:Unexpected property: ‘touchEnabled’ (WEB)

错误:Assertion failed: (ccNodeLoadersIterator != this->mCCNodeLoaders.end()), function getCCNodeLoader, file /Cocos2d-project/proj.ios/../../../extensions/CCBReader/CCNodeLoaderLibrary.cpp, line 67. (Native 应用)

原因:CCB 层绑定的对象错误,目前 Cocos2d-x 可以使用的语言有:c++, javascript, lua ,需要根据你的语言绑定到对应的类/控制器。

解决方法

在 CocosBuilder 右侧的 Code Connections 可以看到对应的是 JS Controller 或者 Custom class,请根据你的语言使用对应的属性,切换代码连接:CocosBuilder Menus -> Document -> JavaScript Controlled

使用 Lua 的童鞋看这里:https://github.com/shawnclovie/cocos2dx-LuaProxy


BTW:研究 cocos2d-x 这货已经好一阵子了,因为不懂 c++ 懂点 JS,于是在语言果断选择 JS 了。 但是目前 JS 方面的资料真的太少太少了。之前已经踩过不少坑了,出于人道主义,天坑列表会不断更新。