2014-07-15 14:43:40 +08:00
# cocos2d-x v3.2 Release Notes #
2014-01-07 08:33:14 +08:00
2014-01-07 08:26:48 +08:00
**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)*
2014-07-15 14:46:56 +08:00
- [cocos2d-x v3.2 Release Notes ](#user-content-cocos2d-x-v32-release-notes )
2014-05-20 08:02:30 +08:00
- [Misc Information ](#user-content-misc-information )
- [Requirements ](#user-content-requirements )
- [Runtime Requirements ](#user-content-runtime-requirements )
- [Compiler Requirements ](#user-content-compiler-requirements )
- [How to run tests ](#user-content-how-to-run-tests )
2014-06-17 21:18:08 +08:00
- [Mac OSX & iOS ](#user-content-mac-osx--ios )
- [Android ](#user-content-android )
- [Windows ](#user-content-windows )
- [Linux ](#user-content-linux )
2014-05-20 08:02:30 +08:00
- [How to start a new game ](#user-content-how-to-start-a-new-game )
2014-07-15 14:46:56 +08:00
- [Highlights of v3.2 ](#user-content-highlights-of-v32 )
- [Documents ](#user-content-documents )
2014-07-06 20:59:34 +08:00
- [Toolchain requirement changed ](#user-content-toolchain-requirement-changed )
2014-05-20 08:02:30 +08:00
- [Features in detail ](#user-content-features-in-detail )
2014-07-15 14:46:56 +08:00
- [Sprite3D & Animation3D ](#user-content-sprite3d--animation3d )
2014-06-17 21:18:08 +08:00
- [fbx-conv usage ](#user-content-fbx-conv-usage )
2014-07-15 14:46:56 +08:00
- [Game controller ](#user-content-game-controller )
2014-07-06 20:59:34 +08:00
- [Fast tilemap ](#user-content-fast-tilemap )
- [Node::enumerateChildren ](#user-content-nodeenumeratechildren )
- [utils::findChildren ](#user-content-utilsfindchildren )
2014-07-15 14:46:56 +08:00
- [Node::setNormalizedPosition ](#user-content-nodesetnormalizedposition )
2014-05-20 08:02:30 +08:00
2014-01-07 08:23:06 +08:00
# Misc Information
2014-07-15 14:48:00 +08:00
* 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
2014-05-20 07:56:33 +08:00
* v3.0 Release Notes can be found here: [v3.0 Release Notes ](https://github.com/cocos2d/cocos2d-x/blob/cocos2d-x-3.0/docs/RELEASE_NOTES.md )
2014-01-07 08:23:06 +08:00
# Requirements
## Runtime Requirements
* Android 2.3 or newer
* iOS 5.0 or newer
* OS X 10.7 or newer
* Windows 7 or newer
2014-05-20 07:56:33 +08:00
* Windows Phone 8 or newer
2014-07-06 20:53:17 +08:00
* Linux Ubuntu 14.04 or newer
2014-01-07 08:23:06 +08:00
* ~~Browsers via Emscripten~~ N/A for the moment
## Compiler Requirements
2014-07-16 11:26:21 +08:00
* Xcode 5.1 or newer for iOS or Mac
2014-07-06 20:53:17 +08:00
* gcc 4.9 or newer for Linux
* ndk-r9d or newer for Android
2014-05-20 07:56:33 +08:00
* Visual Studio 2012 or newer for Windows (win32)
* Visual Studio 2012 or newer for Windows Phone 8
2014-01-07 08:23:06 +08:00
2014-04-21 14:50:27 +08:00
## How to run tests
2014-03-04 18:15:30 +08:00
### Mac OSX & iOS
* Enter `cocos2d-x/build` folder, open `cocos2d_test.xcodeproj`
* Select `iOS` or `OS X` target in scheme toolbar
* Click `run` button
### Android
2014-03-07 08:37:33 +08:00
You can run the samples...
2014-03-04 18:15:30 +08:00
2014-03-07 08:37:33 +08:00
**Using command line:**
2014-03-04 18:15:30 +08:00
$ cd cocos2d-x
2014-03-06 14:44:33 +08:00
$ ./setup.py
2014-03-04 18:15:30 +08:00
$ cd build
2014-03-14 15:01:11 +08:00
$ ./android-build.py cpp-empty-test -p 10
$ adb install cocos2d-x/tests/cpp-empty-test/proj.android/bin/CppEmptyTest-debug.apk
2014-03-04 18:15:30 +08:00
Then click item on Android device to run tests. Available value of `-p` is the API level, cocos2d-x supports from level 10.
2014-03-07 08:37:33 +08:00
**Using Eclipse:**
2014-03-04 18:15:30 +08:00
$ cd cocos2d-x
2014-03-06 14:44:33 +08:00
$ ./setup.py
2014-03-04 18:15:30 +08:00
$ cd build
2014-03-14 15:01:11 +08:00
$ ./android-build.py cpp-empty-test -p 10
2014-03-04 18:15:30 +08:00
Then
* Import cocos2d-x Android project into Eclipse, the path used to import is `cocos/2d/platform/android`
2014-03-14 15:01:11 +08:00
* Import `cpp-empty-test` Android project into Eclipse, the path used to import is `tests/cpp-empty-test/proj.android`
* Build `cpp-empty-test` Android project and run
2014-03-04 18:15:30 +08:00
### Windows
* Enter `cocos2d-x/build` , and open `cocos2d-win32.vs2012.sln`
2014-03-14 15:01:11 +08:00
* Select `cpp-empty-test` as running target
2014-03-04 18:15:30 +08:00
* Click run button
### Linux
$ cd cocos2d-x/build
$ ./install-deps-linux.sh
$ cd ../..
Then
$ mkdir build
$ cd build
2014-03-14 15:01:11 +08:00
$ cmake ../cocos2d-x
2014-03-04 18:15:30 +08:00
$ make -j4
Run
2014-03-14 15:01:11 +08:00
$ cd bin/cpp-empty-test
$ ./cpp-empty-test
2014-03-04 18:15:30 +08:00
2014-03-06 14:44:33 +08:00
## How to start a new game
2014-05-20 08:05:05 +08:00
Please refer to this document: [ReadMe ](../README.md )
2014-03-04 18:15:30 +08:00
2014-07-15 14:43:40 +08:00
# Highlights of v3.2
2014-01-07 08:23:06 +08:00
2014-07-15 14:43:40 +08:00
* `Animation3D` /`Animate3D`, new nodes for 3d animation
* `fbx-conv` supports generating binary format which is supported by `Sprite3D`
* Game controller support
* Fast tilemap support
* Added `utils::cpatureScreen` to take screenshot
* Physics body supports scale and rotation
* Added `Node::enumerateChildren` and `utils::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
* [Sprite3D & Animation3D ](http://cocos2d-x.org/wiki/Sprite3D )
* [Game controller ](http://www.cocos2d-x.org/wiki/Game_Controller )
* [How to compile shader on WP8 ](http://cocos2d-x.org/wiki/How_to_update_wp8_shader )
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
# Toolchain requirement changed
2014-01-07 08:23:06 +08:00
2014-07-16 11:26:21 +08:00
`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
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
* NDK r9d or newer version is required for Android building
* gcc 4.9 is required for linux building
2014-07-16 11:26:21 +08:00
* Xcode 5.1 or newer is required on iOS
2014-01-07 08:23:06 +08:00
2014-07-17 14:14:19 +08:00
# 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
```c++
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 ](https://github.com/cocos2d/cocos2d-x/pull/7440 ). You can refer to this pull request for demail information.
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
# Features in detail
2014-01-07 08:23:06 +08:00
2014-07-15 14:43:40 +08:00
## Sprite3D & Animation3D
2014-03-07 08:37:33 +08:00
2014-07-06 20:53:17 +08:00
Sample code to use binary version
```c++
auto sprite3d = Sprite3D::create("filename.c3b");
addChild(sprite3d);
2014-07-15 14:43:40 +08:00
auto animation3d = Animation3D("filename.c3b");
auto animate3d = Animate3D::create(animation3d);
sprite3d->runAction(RepeatForEver::create(animate));
2014-07-06 20:53:17 +08:00
```
2014-01-07 08:23:06 +08:00
2014-07-15 14:43:40 +08:00
Detail information please refer to [Sprite3D & Animation3D ](http://cocos2d-x.org/wiki/Sprite3D ).
2014-01-07 08:23:06 +08:00
2014-06-17 21:13:49 +08:00
### `fbx-conv` usage
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
* Mac OS X
2014-01-07 09:04:12 +08:00
2014-01-07 08:23:06 +08:00
```
2014-07-06 20:53:17 +08:00
$ cd COCOS2DX_ROOT/tools/fbx-conv/mac
$ ./fbx-conv [-a|-b|-t] FBXFile
2014-01-07 08:23:06 +08:00
```
2014-07-06 20:53:17 +08:00
* Windows
```
cd COCOS2DX_ROOT/tools/fbx-conv/windows
fbx-conv [-a|-b|-t] FBXFile
2014-05-20 07:56:33 +08:00
```
2014-07-06 20:53:17 +08:00
Options:
* -a: export both text and binary format
* -b: export binary format
* -t: export text format
2014-07-15 14:43:40 +08:00
## Game controller
2014-07-06 20:53:17 +08:00
Supported controller type:
2014-07-15 14:43:40 +08:00
* Android standard controllers
* Amazon tv
2014-07-06 20:53:17 +08:00
* OUYA
* Moga
* Nibiru
* iOS standard controllers
2014-07-15 14:43:40 +08:00
Sample codes
```c++
// 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;
...
}
}
```
2014-07-06 20:53:17 +08:00
2014-07-15 14:43:40 +08:00
Detail information please refer to [Game controller ](http://www.cocos2d-x.org/wiki/Game_Controller ).
2014-07-06 20:53:17 +08:00
## Fast tilemap
Fast tilemap has the same API as `TMXTiledMap` without deprecated functions.
Sample code
```c++
auto tilemap = FastTMXTiledMap::create("MyFile.tmx");
addChild(tilemap);
2014-05-20 12:07:43 +08:00
```
2014-07-06 20:53:17 +08:00
Full demo please refer to `COCOS2DX_ROOT/tests/cpp-tests/Classes/TileMapTest/TileMapTest2.cpp` .
2014-05-20 12:07:43 +08:00
2014-07-06 20:53:17 +08:00
## Node::enumerateChildren
2014-07-15 14:43:40 +08:00
This functions is used to enumerate children of a `Node` . It supports c++ 11 regular expression.
2014-05-20 12:07:43 +08:00
```c++
2014-07-06 20:53:17 +08:00
// 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
});
2014-07-15 14:43:40 +08:00
// 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
});
2014-05-20 12:07:43 +08:00
```
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
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
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
This is a helper function to find children of a `Node` share a name. The implementation of this function bases on `Node::enumerateChildren` .
```c++
auto children = utils::findChildren(node, "nameToFind");
2014-01-07 08:23:06 +08:00
2014-07-06 20:53:17 +08:00
...
2014-07-06 20:59:34 +08:00
```
2014-07-15 14:43:40 +08:00
## 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:
```c++
// pseudo code
void setNormalizedPosition(Vec2 pos)
{
Size s = getParent()->getContentSize();
_position = pos * s;
}
```
2014-07-15 14:46:56 +08:00
Full test please refer to `NodeNormalizedPositionTest1/2` in `tests/cpp-tests/Classes/NodeTest/NodeTest.cpp` .