Edited at

Cocos2d-x v3.0の使い方

More than 5 years have passed since last update.


3.0リリースに伴い修正


基本設定

ここでは、ダウンロードしたzipファイルをホームディレクトリに解凍したものとします。

さらに利便性のため、シンボリックリンクを張って使います。

$ ln -s cocos2d-x-3.0 cocos2d-x

$ cd cocos2d-x
$ ./setup.py


Android用の設定

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

# 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というフォルダを作成してプロジェクトを格納することにします。

$ 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
}