Cocos2d-x v3.0の使い方

- - -
3.0リリースに伴い修正

## 基本設定
ここでは、ダウンロードしたzipファイルをホームディレクトリに解凍したものとします。
さらに利便性のため、シンボリックリンクを張って使います。

```bash
$ ln -s cocos2d-x-3.0 cocos2d-x
$ cd cocos2d-x
$ ./setup.py 
```

### Android用の設定
自動的に出来上がった **.bash_profile**にAndroid用の設定を追加します。

```bash
# Add environment variable COCOS_CONSOLE_ROOT for cocos2d-x
export COCOS_CONSOLE_ROOT=$HOME/cocos2d-x/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH

export NDK_ROOT=$HOME/AndroidDev/android-ndk-r9d
export ANDROID_SDK_ROOT=$HOME/drjiro/AndroidDev/sdk
export ANT_ROOT=$HOME/AndroidDev/sdk/tools/ant
```

## マルチプラットフォーム用プロジェクトの作成
cocos-consoleを使うように変更になっています。

- -p: パッケージ名
- -l: 言語(cpp,jua,js)
- -d: 作成するディレクトリ
- -t: テンプレート名
- -h: ヘルプ

ここではホームディレクトリに **ccprojects**というフォルダを作成してプロジェクトを格納することにします。

```bash
$ cd ccprojects
$ cocos new SampleGame1 -p com.drjiro.sample -l cpp
```

- これで、 **SampleGame1**ファイルだが作成され、その中のフォルダが作成されます。

```
CMakeLists.txt
Classes/
Resources/
cocos2d/
proj.android/
proj.ios_mac/
proj.linux/
proj.win32/
proj.wp8-xaml/
```

- Mac/iOS版(proj.ios_mac/SampleGame1.xcodeproj)をXcodeで起動します。 

作成されたプログラムは次のようになっています。コメントは日本語に翻訳してあります。

```HelloWorldScene.cpp
#include "HelloWorldScene.h"

USING_NS_CC;

/**
 *  シーンを作成する。
 *
 *  @return シーン
 */
Scene* HelloWorld::createScene()
{
    // 'scene' は autorelease オブジェクト
    auto scene = Scene::create();
    
    // 'layer' は autorelease オブジェクト
    auto layer = HelloWorld::create();

    // レイヤーをシーンの子として追加する。
    scene->addChild(layer);

    // シーンを返す。
    return scene;
}

/**
 *  インスタンスを初期化する。
 *
 *  @return 成功したらtrue
 */
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. 親クラスを初期化する。
    if ( !Layer::init() )
    {
        return false;
    }
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Point origin = Director::getInstance()->getVisibleOrigin();

    /////////////////////////////
    // 2. クリックすると終了する”X”画像付きのメニュー項目を追加する。これは変更してもよい。

    // プログラムを終了する"close"アイコンを追加する。これは autorelease オブジェクト。
    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    
	closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // メニューを作成する。これは autorelease オブジェクト。
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Point::ZERO);
    this->addChild(menu, 1);

    /////////////////////////////
    // 3. 独自のコードを追加する。

    // ラベルを作成し、初期化する。
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // 画面の中央にラベルを位置づける。
    label->setPosition(Point(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // ラベルをレイヤーの子として追加する。
    this->addChild(label, 1);

    // "HelloWorld"スプラッシュスクリーンを追加する。
    auto sprite = Sprite::create("HelloWorld.png");

    // スプライトを画面の中央に位置づける。
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // スプライトをレイヤーの子として追加する。
    this->addChild(sprite, 0);
    
    return true;
}

/**
 *  メニューの"Close"が選択された場合のコールバック関数。
 *
 *  @param pSender 送信元
 */
void HelloWorld::menuCloseCallback(Object* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
	MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
    return;
#endif

    // ディレクタを終了する。
    Director::getInstance()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

```