cocos2d-x v3.2 Release Notes
Table of Contents generated with DocToc
- cocos2d-x v3.2 Release Notes
- Misc Information
- Requirements
- Highlights of v3.2
- Documents
- Toolchain requirement changed
- atof issue on Android
- Features in detail
Misc Information
- Download: http://cdn.cocos2d-x.org/cocos2d-x-3.2.zip
- Full Changelog: https://github.com/cocos2d/cocos2d-x/blob/cocos2d-x-3.2/CHANGELOG
- API Reference: http://www.cocos2d-x.org/reference/native-cpp/V3.2/index.html
- v3.0 Release Notes can be found here: v3.0 Release Notes
Requirements
Runtime Requirements
- Android 2.3 or newer
- iOS 5.0 or newer
- OS X 10.7 or newer
- Windows 7 or newer
- Windows Phone 8 or newer
- Linux Ubuntu 14.04 or newer
Browsers via EmscriptenN/A for the moment
Compiler Requirements
- Xcode 5.1 or newer for iOS or Mac
- gcc 4.9 or newer for Linux
- ndk-r9d or newer for Android
- Visual Studio 2012 or newer for Windows (win32)
- Visual Studio 2012 or newer for Windows Phone 8
How to run tests
Mac OSX & iOS
- Enter
cocos2d-x/build
folder, opencocos2d_test.xcodeproj
- Select
iOS
orOS X
target in scheme toolbar - Click
run
button
Android
You can run the samples...
Using command line:
$ 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
Then click item on Android device to run tests. Available value of -p
is the API level, cocos2d-x supports from level 10.
Using Eclipse:
$ cd cocos2d-x
$ ./setup.py
$ cd build
$ ./android-build.py cpp-empty-test -p 10
Then
- Import cocos2d-x Android project into Eclipse, the path used to import is
cocos/2d/platform/android
- Import
cpp-empty-test
Android project into Eclipse, the path used to import istests/cpp-empty-test/proj.android
- Build
cpp-empty-test
Android project and run
Windows
- Enter
cocos2d-x/build
, and opencocos2d-win32.vs2012.sln
- Select
cpp-empty-test
as running target - Click run button
Linux
$ cd cocos2d-x/build
$ ./install-deps-linux.sh
$ cd ../..
Then
$ mkdir build
$ cd build
$ cmake ../cocos2d-x
$ make -j4
Run
$ cd bin/cpp-empty-test
$ ./cpp-empty-test
How to start a new game
Please refer to this document: ReadMe
Highlights of v3.2
Animation3D
/Animate3D
, new nodes for 3d animationfbx-conv
supports generating binary format which is supported bySprite3D
- Game controller support
- Fast tilemap support
- Added
utils::cpatureScreen
to take screenshot - Physics body supports scale and rotation
- Added
Node::enumerateChildren
andutils::findChildren
, and support c++ 11 regular expression - Added
Node::setNormalizedPosition
,Node
's position in pixel will be calculated according its parent's content size
Documents
Toolchain requirement changed
Node::enumerateChildren()
uses std::regex
which will cause crash using gcc v4.8 or lower version.
Because OTHER_LDFLAGS
can not work in Xcode6 beta3. So we used fat library(including 64-bit libaries) on iOS. But Xcode 5.0 or lower version has building problem by this way.
So
- NDK r9d or newer version is required for Android building
- gcc 4.9 is required for linux building
- Xcode 5.1 or newer is required on iOS
atof issue on Android
We found a bug of atof
on Android when using libc++. The bug is that, the return value of atof
may be -inf
when passing some valid digit string.
For example
atof("90.099998474121094"); // -> return value is -inf
We have reported it to google guys, and they confirmed that it is a bug. In order to work around this issue, we added utils::atof()
.
The corresponding pull request for this issue is here. You can refer to this pull request for demail information.
Features in detail
Sprite3D & Animation3D
Sample code to use binary version
auto sprite3d = Sprite3D::create("filename.c3b");
addChild(sprite3d);
auto animation3d = Animation3D("filename.c3b");
auto animate3d = Animate3D::create(animation3d);
sprite3d->runAction(RepeatForEver::create(animate));
Detail information please refer to Sprite3D & Animation3D.
fbx-conv
usage
- Mac OS X
$ cd COCOS2DX_ROOT/tools/fbx-conv/mac
$ ./fbx-conv [-a|-b|-t] FBXFile
- Windows
cd COCOS2DX_ROOT/tools/fbx-conv/windows
fbx-conv [-a|-b|-t] FBXFile
Options:
- -a: export both text and binary format
- -b: export binary format
- -t: export text format
Game controller
Supported controller type:
- Android standard controllers
- Amazon tv
- OUYA
- Moga
- Nibiru
- iOS standard controllers
Sample codes
// 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;
...
}
}
Detail information please refer to Game controller.
Fast tilemap
Fast tilemap has the same API as TMXTiledMap
without deprecated functions.
Sample code
auto tilemap = cocos2d::experimental::TMXTiledMap::create("MyFile.tmx");
addChild(tilemap);
Full demo please refer to COCOS2DX_ROOT/tests/cpp-tests/Classes/TileMapTest/TileMapTest2.cpp
.
Node::enumerateChildren
This functions is used to enumerate children of a Node
. It supports c++ 11 regular expression.
// 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
});
Full test please refer to NodeNameTest
in COCOS2DX_ROOT/tests/cpp-tests/NodeTest/NodeTest.cpp
.
Because this function uses std::regex
which is not supported well in gcc 4.8 or lower version. So we use clang
and stdc++
instead for Android building. This lead to the result that NDK r9d
or newer is required. And gcc 4.9
is required on linux.
utils::findChildren
This is a helper function to find children of a Node
share a name. The implementation of this function bases on Node::enumerateChildren
.
auto children = utils::findChildren(node, "nameToFind");
...
Node::setNormalizedPosition
Can use this function to set Node's position(x,y) using value between 0 and 1. Can use this function when it has a parent node.
The positions in pixels is calculated like the following:
// pseudo code
void setNormalizedPosition(Vec2 pos)
{
Size s = getParent()->getContentSize();
_position = pos * s;
}
Full test please refer to NodeNormalizedPositionTest1/2
in tests/cpp-tests/Classes/NodeTest/NodeTest.cpp
.