本文共 4537 字,大约阅读时间需要 15 分钟。
yangyong2014-07-23 10:45:373540 次阅读
综合信息
要求
运行环境要求
Android 2.3或以上系统
iOS 5.0或以上系统
OS X 10.7或以上系统
Windows 7或以上系统
Windows Phone 8或以上系统
Linux Ubuntu 14.04或以上系统
编译环境要求
iOS或Mac编译需要Xcode 5.1或以上版本
Linux编译需要gcc 4.9或以上版本
Android编译需要NDK R9D以上版本
Windows (win32)编译需要Visual Studio 2012或以上版本
Windows Phone 8编译需要Visual Studio 2012或以上版本
如何运行tests
Mac OSX & iOS
* 进入 cocos2d-x/build 文件夹, 打开 cocos2d_test.xcodeproj文件
* 在Xcode的工具栏选择 iOS 或 OS X 作为目标
* 点击 run 按钮运行
Android
你可以通过以下方式运行tests:
* 使用命令行:
1 2 3 4 5 | $ cd cocos2d-x $ ./setup.py $ cd build $ ./android-build.py cpp-empty-test -p 10 $ adb install cocos2d-x/tests/cpp-empty-test/proj.android/bin/CppEmptyTest-debug.apk |
然后在你的Android设备上点击该项运行tests。 -p用于指定可用的API级别,Cocos2d-x 支持10级以上的API。
使用Eclipse:
1 2 3 4 | $ cd cocos2d-x $ ./setup.py $ cd build $ ./android-build.py cpp-empty-test -p 10 |
然后
* 导入Cocos2d-x的Android工程到Eclipse, 导入的路径是 cocos/2d/platform/android
* 导入cpp-empty-test的Android工程到Eclipse, 导入的路径是 tests/cpp-empty-test/proj.android
* 编译并运行cpp-empty-test的Android工程
Windows
* 进入cocos2d-x/build文件夹, 然后打开cocos2d-win32.vs2012.sln文件
* 选择cpp-empty-test作为运行目标
* 点击run按钮运行
Linux
1 2 3 | $ cd cocos2d-x/build $ ./install-deps-linux.sh $ cd ../.. |
然后
1 2 3 4 | $ mkdir build $ cd build $ cmake ../cocos2d-x $ make -j4 |
运行
1 2 | $ cd bin/cpp-empty-test $ ./cpp-empty-test |
* 新的3D动画节点Animation3D/Animate3D
* 支持fbx-conv工具生成Sprite3D支持的二进制格式
* 支持游戏手柄
* 支持快速瓦片地图
* 加入utils::cpatureScreen方法用于截屏
* Physics body支持缩放和旋转
* 加入Node::enumerateChildren 和 utils::findChildren方法,且支持C++ 11的正则表达式
* 加入Node::setNormalizedPosition方法, Node的位置像素会根据它的服节点的尺寸大小计算
文档
工具链需求的改变
因 为Node::enumerateChildren()使用了std::regex,所以使用gcc V4.8或更低版本构建的程序运行时会崩溃。 由于OTHER_LDFLAGS不能在Xcode6 beta3中使用,在iOS上我们使用包括64位库文件的fat library。但是Xcode 5.0或更低版本不支持这种方式。
所以
* Android编译需要NDK R9D以上版本
* Linux编译需要GCC4.9以上版本
* iOS编译需要 Xcode5.1以上版本
Android上的atof问题
我们在Android上使用libc++时发现了一个atof的bug。这个bug是这样的,当我们传递一些有效的数字串时,atof可能返回的值是-inf。
例如:
1 2 | c++ atof ( "90.099998474121094" ); // -> return value is -inf |
我们已经向Google报告了这个问题,并且他们确认这是一个bug。为了解决这个问题,我们加入了utils::atof()方法。
这对这个问题的在这里,你可以查看该PR获取更多详细信息。
详细特性
Sprite3D和Animation3D
使用二进制创建Sprite3D和Animation3D的示例代码
1 2 3 4 5 | c++ auto sprite3d = Sprite3D::create( "filename.c3b" ); addChild(sprite3d); auto animation3d = Animation3D( "filename.c3b" ); auto animate3d = Animate3D::create(animation3d); sprite3d->runAction(RepeatForEver::create(animate)); |
详细信息请参考:
fbx-conv的用法
Mac OS X 环境
1 | $ cd COCOS2DX_ROOT/tools/fbx-conv/mac $ ./fbx-conv [-a|-b|-t] FBXFile |
Windows 环境
1 | cd COCOS2DX_ROOT/tools/fbx-conv/windows fbx-conv [-a|-b|-t] FBXFile |
可选参数:
-a: 输出文本和二进制格式
-b: 输出二进制格式
-t: 输出文本格式
游戏手柄
支持的手柄类型:
* 标准的Android手柄
* Amazon tv
* OUYA
* Moga
* Nibiru
* 标准的iOS手柄
示例代码
1 2 3 4 5 6 7 8 9 10 11 | // register event listener auto listener = EventListenerController::create(); listner->onKeyDown = ... ... eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this ); // start connecting controller Controller::startDiscoveryController(); // handler key down/ key up event void GameControllerTest::onKeyDown(Controller *controller, int keyCode, Event *event) { switch (keyCode) { case Controller::Key::BUTTON_A: ... break ; ... } } |
详细信息请参考:
快速瓦片地图
快速瓦片地图使用和TMXTiledMap一样的API,且没有弃用的方法。
示例代码
1 2 3 | c++ auto tilemap = cocos2d::experimental::TMXTiledMap::create( "MyFile.tmx" ); addChild(tilemap); |
完整Demo请参考
1 | COCOS2DX_ROOT/tests/cpp-tests/Classes/TileMapTest/TileMapTest2.cpp. |
Node::enumerateChildren
该方法用于枚举一个Node的子节点。它支持C++ 11的正则表达式。
1 2 3 4 | // Find nodes whose name is 'nameToFind' and end with digits. node->enumerateChildren( "nameToFind[[:digit:]]+" , [](Node* node) -> bool { ... return false ; // return true to stop at first match }); // Find nodes whose name is 'nameToFind' and end with digits recursively. node->enumerateChildren( "nameToFind[[:digit:]]+" , [](Node* node) -> bool { ... return false ; // return true to stop at first match }); |
完整的测试代码请参考COCOS2DX_ROOT/tests/cpp-tests/NodeTest/NodeTest.cpp中的NodeNameTest测试。
因为该方法使用的std::regex不支持gcc4.8及以下版本;所以我们使用clang和stdc++代替Android构建。这个结果导致Android构建需要NDK r9d级以上版本,Linux需要gcc 4.9。
utils::findChildren
这是一个辅助方法,用于查找与节点共用名字的子节点;是在Node::enumerateChildren的基础上实现的。
1 2 | auto children = utils::findChildren(node, "nameToFind" ); ... |
Node::setNormalizedPosition
用该方法可以使用0-1之间的值设置节点position(x,y)。当节点有父节点时才可以使用该方法。节点的像素位置计算方式如下:
1 2 3 4 5 6 | c++ // pseudo code void setNormalizedPosition(Vec2 pos) { Size s = getParent()->getContentSize(); _position = pos * s; } |
完整的测试代码请参照tests/cpp-tests/Classes/NodeTest/NodeTest.cpp中的NodeNormalizedPositionTest1/2测试。