読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

cocos2d-x v3.0-pre-alpha0を触ってみる

こんにちは。今回ブログを担当します長屋です。

ついにcocos2d-xの最新バージョンがアルファの段階ですがリリースされました!

☆cocos2d-x v3.0-pre-alpha0☆
News : cocos2d-x v3.0-pre-alpha0 and cocos2d-html5 v2.1.5

この中で気になった一部の変更点をあげてみたいと思います。

ただし現段階でalphaバージョンなので正式版リリースまでに変更される部分が有るかもしれません。

〜変更点その①〜

クラスや関数のObjective-Cチックな命名規則が使われなくなり、頭から「CC」が使われなくなりました。

<例>
 CCMenu ⇒ Menu

 CCSprite ⇒ Sprite

CCがついたクラスも使用することができますが、すべて非推奨になってしまいました。

個人的には自分で作ったクラスと区別がつけづらくなるので前のままの方が便利なのですが・・・。

〜変更点その②〜

CallFuncやMenuItemでのコールバックでC++11のstd::function<>がサポートされ、今までの方法が非推奨になりました。

std::function<>がサポートされたことによりラムダ式が使用できるようになりました!

※Androidでビルドする場合は「Android ndk-r8e」以上のバージョンのNDKを使用してください。

 //こちらは非推奨になってしまいました  
 MenuItemImage *pLamdIte0 = MenuItemImage::create("CloseNormal.png",  
                                                  "CloseSelected.png",  
                                                  this,  
                                                  menu_selector(HelloWorld::menuCallback));  
  
 //定義してある別のマクロを利用して今まで通りハンドラとしてメンバ関数を渡すこともできます  
 MenuItemImage *pLamdIte1 = MenuItemImage::create("CloseNormal.png",  
                                                  "CloseSelected.png",  
                                                  CC_CALLBACK_1(HelloWorld::menuCallback,this));  
  
 //コールバックを関数オブジェクトで扱うのでラムダ式も使用できます  
 //この場合はラムダ式の引数にObjectを指定してください  
 MenuItemImage *pLamdIte2 = MenuItemImage::create("CloseNormal.png",  
                                                  "CloseSelected.png",  
                                                  [this](Object *pSender){  
  
                                                  //ログ出力  
                                                  CCLOG("pLamdIte2が押された!");  
                                                  m_pMenu->removeFromParent();  
  
                                                  });  
  
 //もちろんCallFunc系のオブジェクトでもラムダ式を使用できます  
 Sequence *pSequence = Sequence::create(  
                                        DelayTime::create(4.0f),  
                                        CallFunc::create([]() {  
  
                                        CCLOG("4秒たちました!");  
  
                                        }),  
                                        NULL);

またC++11の他機能もサポートされたので今まで以上に柔軟なソースを書くことができます!
■ サポート一覧
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Cocos2d_c++_coding_style#C11

〜変更点その③〜
Xcode用のテンプレートやAndroidのプロジェクト生成スクリプトが削除されました。

代わりに「create-multi-platform-projects.py」を使用してプロジェクトを生成するようになりました。

■ 使用方法
python ./create-multi-platform-projects.py -p プロジェクト名 -k パッケージ名 -l 使用言語  <cpp|lua|javascript>

このスクリプトを使用することでprojectフォルダ内に(無い場合はprojectフォルダがを自動生成)プロジェクトが生成されます。
各プラットフォームに対応したプロジェクトが生成されるので必要の無いプラットフォームのプロジェクトは削除してもかまいません。

今回の変更点で大きいのは個人的にC++11の対応が大きいでしょうか。

まだalpha0なので今後また新しい機能が増えるかもしれませんね。
cocos2d-xの方でコーディング規約も公開されたので一度目を通してみるといいかもです。
今年の夏も暑いですが頑張っていきましょう!

■ コーディング規約
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Cocos2d_c++_coding_style

■ リリースノート
http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Release_Node_v300