LoginSignup
12

More than 5 years have passed since last update.

Cocos2d-x v3.0の使い方

Last updated at Posted at 2014-04-24

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
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12