cocos2d-x 3.0
しばらくcocos2d-xから離れていたら3.0がbetaリリースされていました。
書籍を見ながら久しぶりに触っていると結構異なっていてなかなか想い通りに進まない!
どんな変更があるのかと見てみると色々大きな変更も多いような。
c++11機能
- callbackのためにstd::functionやlamdaの実装
- strongly typed enums
kから始まる定数やenumをstrongly typed enumsで置き換えました。
- override
overrideキーワードをつけられたメソッドがオーバーライドされていない場合エラーになります。
Objective-cパターンの削除
- CCプリフィックス削除
CCSpriteやCCLabelTTFなどCCプレフィックスがついているクラスやメソッドからCCが削除されました。
- メソッド名の変更
例えば、singleインスタンスの取得メソッドがshared~()からgetInstance()に変更されていたりします。
- getterメソッドにgetがついた
//2.2まで node->boundingBox(); //3.0以降 node->getBoundingBox() ;
- copy()の代わりにclone()を実装した
clone()で複製されたインスタンスは、autoreleaseされているのでrelease、autoreleaseする必要はありません。
copy()は、compileはできちゃうけどクラッシュするので使わないで下さい。
- PODタイプ
SizeやPointなどのPODタイプの引数を持つメソッド
// v2.1 void setTexParameters(ccTexParams* texParams); // v3.0 void setTexParameters(const ccTexParams& texParams);
TouchDispatcher系のイベントデスパッチャーの削除
代わりにEventListenerが追加されました。
auto sprite = Sprite::create("file.png"); ... auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouch(true); listener->onTouchBegan = [](Touch* touch, Event* event) { do_some_thing(); return true; }; listener->onTouchMoved = [](Touch* touch, Event* event) { do_some_thing(); }; listener->onTouchEnded = [](Touch* touch, Event* event) { do_some_thing(); }; listener->onTouchCancelled = [](Touch* touch, Event* event) { do_some_thing(); }; // The priority of the touch listener is based on the draw order of sprite EventDispatcher::getInstance()->addEventListenerWithSceneGraphPriority(listener, sprite); // Or the priority of the touch listener is a fixed value EventDispatcher::getInstance()->addEventListenerWithFixedPriority(listener, 100); // 100 is a fixed value
物理特性の統合
PhysicsWorld、PhysicsBody、PhysicsShape、PhysicsJoint、PhysicsContactからなります。
これらを利用したい場合には、ccConfigヘッダでCC_USE_PHYSICSを定義する必要があるようですが、デフォルトで定義されていました。
- PhysicsWorld
PhysicsWorldオブジェクトは、衝突判定や他の物理プロパティをシミュレーションします。そして、直接オブジェクトを生成する必要はなく、sceneオブジェクトからPhysicsWorldオブジェクトを得る事ができます。
Scene* scene = Scene::createWithPhysics(); PhysicsWorld* world = scene->getPhysicsWorld(); PhysicsBody
- PhysicsBody
PhysicsBodyオブジェクトは、ノードに物理シミュレーションを追加する時に使われます。
PhysicsBody* body = PhysicsBody::createCircle(5.0f);
Node* node = Node::create();
node->setPhysicsBody(body);
scene->addChild(node);
物理オブジェクトとC++11については正直良く分かっていないので、サンプルコードを載せながらまた説明できればと思っています。
https://github.com/cocos2d/cocos2d-x/blob/develop/docs/RELEASE_NOTES.md