Cocos2d-x v3.2 详细说明

           

转载URL:http://cn.cocos2d-x.org/tutorial/show?id=1180

 

Cocos2d-x v3.2 详细说明

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


3.2版本的新特性

* 新的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测试。


你可能感兴趣的:(说明,cocos2d-x,v3.2)