yangyong2014-07-23 10:45:373540 次阅读
综合信息
下载地址
完整的更新记录
API参考
3.0版本的发布记录
要求
运行环境要求
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的位置像素会根据它的服节点的尺寸大小计算
文档
Sprite3D & Animation3D
游戏手柄
工具链需求的改变
因 为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在这里,你可以查看该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));
|
详细信息请参考:Sprite3D & Animation3D
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测试。