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
}