HASIGOLOG

Cocos2d-xを使う心得(初心者から中級者まで)

Unity5が出ている今、ゲーム作りたい人やプログラムを勉強する初心者など使っているが多いと思います。やはり本格的にプログラムを勉強したい人cocos2d-xがおすすめです。特に学校でjavaやC言語やC++などの初心者に対しては、やってみる価値があると思います。それでも自分5ヶ月ぐらいcocos2d-xを勉強し、3本ゲーム作った経験から心得を述べたいと思います。

1,MacでIOS/Android開発環境を5分で構築

いろいろな構築手順ネット上ありますが、実は多くは複雑でわかりにくい、いらない手順多くあります。実は必要な最低限ものをダウンロードし、タミナールで5分ぐらい開発環境構築できます。

2015年4月現在cocos2d-xの最新バージョンは3.5です. cocos2d-x-3.5をダウンロード。

IOS開発環境はxcodeの最新バージョンインストールすればいいです。

Android開発環境はNDK、SDK、Apache Antがそれぞれ公式サイトから最新のバージョンダウンロードすればいいです。

タミナールを開いて

cd ~/ cocos2d-x-3.5 ./setup.py

順次に ~/NDK、~/SDK、~/Apache Ant/binのパス入れて

最後出た source ~/.zshrcみたいコマンドパスを通せば開発環境構築終わります。

IOS開発環境のIDEはXcodeプラグイン入れてそのまま使ってもいいと思いますが、AndroidのIDEについて、今後主流となるAndroid Studioまだ使いそうにない。

eclipseまた設定する手順が多くて複雑かつ重いです。   マルチプラットフォームに対応すればならば、個人的Xcodeそのまま使って、Androidのビルドやテストタミナールでやったほうが早いと思います。

cocos run -s /Users/username/prj/ -p android
cocos compile -s/Users/username/prj/ -p android -m release

みたいに実機あればデバグとリリース両方テストできます。

2,よく使うC++11知識のTIPS

>型推論

最近人気出始めた言語scalaやApple開発したSwiftなど全部型推論の機能ついています。

言うまでもなく、ほとんどの場合はプログラマーは変数の型を覚える必要がなくなり、開発効率とてもあがります。

auto scene = Scene::create();
auto layer = HelloWorld::create();

変数scene は *Scene型の値が格納されています。

変数layerは*HelloWorld型の値が格納されています。

しかしC++の基本型や良く使うcoscos2d-xの型は

auto int_num = 1; auto float_num = 1.0f; auto string_str = "string"; auto pos = Vec2(1,1);

なども書けますが、やはり紛らわしいので、おすすめのは

int intnum = 1;
float float
num = 1.0f;
std::string string_str = "string";
cocos2d::Vec2 pos = Vec2(1,1);

>文字列操作

c++のstdのstringを参考にすれば、いろいろできます。
画像やファイルやゲーム内データ操作など使うところ結構多いです。

>ベクターを始めコンテナを使うべき

cocos2dのもベクターありますが、std::vectorの方は調べればたくさん出てきますので、保存するデータの必要に応じてstd::mapにも使ってみるといいです。

特に配列はメモリにやさしくないので、あまりおすすめにしません。

3,cocos2d-x開発で知っておくべきポイント

>reference countの原理

cocos2d内変数やオブジェクトなどは reference countで管理されている、0になったときに、自動でメモリ解放されている。

詳細はgoogleでたくさん説明ありますが、これが大事な理由はreference countを意識していないと、エラー起きる原因の大きな理由となります。

状況に応じてretain()やautorealse()などのメソッドを使い分ける必要があります。

>sceneやlayerなどの関係、spriteとlabelの操作

ゲームの基本だいたい sceneの遷移やlayerの重なるでできています。

特にカジュアルゲームの場合はだいたいシーン一つ出来てしまうので。
ゲーム画面ほぼspriteとlabelで作ったlayerの重なるによるものなので、加えてcoscos2dのゲームオブジェクトほぼNodeというsuperclassを継承して作れている。

Nodeのメソッドや一番多く使わているspriteとlabelのメソッドを把握する必要があります。

以下は基本使い方の一例です。

auto bg = Sprite::createWithSpriteFrameName("bg.png");
bg->setPosition(500.0f,500,0f);
addChild(bg);
auto label = Label::createWithTTF("label", FONT_DEFAULT, 33);
label->setPosition(500.0f,500,0f);
label->setColor(Color3B::BLACK);
addChild(label, 1);

>2Dアニメやエフェクトを簡易で実現する

ActionInstantの子クラスとActionIntervalの子クラスを組みあせて利用すれば、様々なアニメやエフェクト簡単で実現できます。

前者は瞬時の動作、後者は連続の動作。特にSpawnクラス(同時の動き)とSequenceクラス(順次の動き)を上手に使うべきです。

以下は一例です。

auto scale1 = ScaleTo::create(0.03, 1, 1);
auto fade1 = FadeTo::create(0.03, 200);
auto move1 = MoveBy::create(0.03, Vec2(20, 0));
auto spawn1 = Spawn::create(scale1, fade1, move1, nullptr);

auto scale2 = ScaleTo::create(0.03, 0.8, 0.6);
auto fade2 = FadeTo::create(0.03, 50);
auto move2 = MoveBy::create(0.03, Vec2(-20, 0));
auto spawn2 = Spawn::create(scale2, fade2, move2, nullptr);

auto seq = Sequence::create(spawn1, spawn2, nullptr);

auto scale3 = ScaleTo::create(0.03, 1, 1);
auto fade3 = FadeTo::create(0.03, 255);
auto spawn3 = Spawn::create(scale3, fade3, nullptr);

auto action = Sequence::create(seq, seq, seq, spawn3, nullptr);
runAction(action);

>API各packageの調べ方や関連

coscos2dの他
coscos2d::extension (ボタンなどのクラス関連)
coscos2d::ui(ui関連)
coscos2d::network(network関連)

実装するとき必要なヘッダファイルをincludeして、いろいろな機能使えるようになります。
公式APIカテゴリで分類されていますので、調べやすい。

4,ラムダ式を使う

>callback関数をラムダ式に書こう

c++の新機能なので、ラムダ式を使ってcallback関数の機能を実現できる。コードの量を減らすことができます。

以下は一例です

auto request = new HttpRequest(); request->setRequestType(HttpRequest::Type::POST); request->setUrl(url); request->setResponseCallback( [this](HttpClient *client, HttpResponse *response) { if (response->isSucceed()) DateManager::IsHttpPostDone = true; }); HttpClient::getInstance()->send(request); request->release();

>DelayTimeメソッドを利用し、遅延処理を実現する

例えば1秒後の遅延処理は以下で書きます。

this->runAction(Sequence::create(DelayTime::create(1.0f), CallFunc::create([this]() { ここで処理を書く }), nullptr));

5,多言語対応 ローカライズの簡単方法

>Xcode6でローカライズは便利なっている。

XLIFF のインポートとエクスポートなどの方法googleで検索すればたくさん出てきます。

>違う言語に応じて処理をする

XLIFF のインポートとエクスポートなどの方法googleで検索すればたくさん出てきます。

auto Language = Application::getInstance()->getCurrentLanguage(); if(Language == LanguageType::JAPANESE) {言語に応じて処理を書く};

以上は自分なりにまとめてcocos2d-x初心者から中級者まで使えるコツなので、お役に立つところあれば幸いです!

RECRUIT

採用情報

私たちと一緒に

働いてみませんか?

to the next page

CONTACT

お問い合わせ

ご相談など

お気軽にご連絡ください

to the next page