1. ?Poppin Games Japan Co., Ltd. All Right Reseved
Cocos2d-x ver3系への
移行とメリット
ポッピンゲームズジャパン株式会社 CTO
小林 敬介
2. ?Poppin Games Japan Co., Ltd. All Right Reseved
小林の自己紹介
● ポッピンゲームズジャパン株式会社 CTO
● 1985年うまれ
ポッピンゲームズの主な開発タイトル紹介
● DRAGON SKY
● ドラゴンシャウト
● ピーターラビットガーデン
● 新アリスの不思議なティーパーティー
詳しくは弊社ウェブサイトをご覧ください
http://poppin-games-japan.com
発表者 紹介
3. ?Poppin Games Japan Co., Ltd. All Right Reseved
今日は保守性向上の話をメインに
● 保守性の向上
○ コールバックがC++のラムダ式になった
○ タッチイベントの優先度が見た目と一致するようになった
○ std::stringが文字列表現の基本になった
○ 64bitに対応してる
○ TrueTypeFontレンダリングエンジンの同梱
○ その他諸々のC++への歩み寄り
● 新機能
○ 3Dモデルの表示、WebViewが使えるようになった etc
cocos2d-x ver3系への移行のメリット
4. ?Poppin Games Japan Co., Ltd. All Right Reseved
std::functionが主流になった
(いままでのCCCallFuncなども一応使える)
● ごく単純な処理のためにメソッドを追加する必要がない
● 自由度も高い
○ コールバック生成時に値をキャプチャしたり
○ std::bindで引数をバインドしたり
ver2系でもC++11を有効にした上でstd::functionをよびだしてくれるActionを自分で定義すれば似たようなことできるけどね
コールバックがC++のラムダ式になった
5. ?Poppin Games Japan Co., Ltd. All Right Reseved
タッチイベントの発動順序をNodeのZオーダーから決められるように
● タッチプライオリティを自分で決めなくていい
○ 見た目上手前にあるNodeから先にイベントが処理される
○ そこで処理をswallowすれば背後のイベントは実行されない
● 複数層になるUIが作りやすい
○ ダイアログを出して画面内のその他のタッチを無効化する、とかも楽
タッチイベントの優先度が見た目と一致するようになった
6. ?Poppin Games Japan Co., Ltd. All Right Reseved
char*やCCStringはほぼ使わなくなった
● ラベルに文字列を設定するときに.c_str()とかしなくていい
● CCStringとchar*とstd::stringで行ったり来たりしないで(概ね)よい
● printfフォーマットによるstd::stringの生成支援のためStringUtils::formatなんて
のもいる
std::stringが文字列表現の基本になった
7. ?Poppin Games Japan Co., Ltd. All Right Reseved
アップルが64bit対応の強制を発表したけどこれで安心
…と思ったらver2系も対応しました
(ただフォーラムが結構荒ぶってたので今後もver2系に同様のサポートが続くとは期待しないほうがいいと思う)
64bitに対応してる
8. ?Poppin Games Japan Co., Ltd. All Right Reseved
レンダリング結果がOS間で同じになる
● FreeTypeライブラリが使われるようになった
○ AndroidとiOS7&8とiOS6.1以前でレンダリング結果が違うことがあった問
題がぐっと改善
○ ただし、OSがよしなにやってくれていた絵文字の処理はされない
● これまで通りOSのレンダリングエンジンを使うことも可能
TrueTypeFontレンダリングエンジンの同梱
9. ?Poppin Games Japan Co., Ltd. All Right Reseved
C++らしいコードが書きやすくなりました。
● CCプレフィックスの削除
○ CCNodeはNode、CCLayerはLayerに
● メソッドや引数へのconstの付与
● CCArrayやCCDictionaryを使わない
○ アクションシーケンスの定義などでCCArrayを作る必要がなくなった
○ かわりにcocos2d::Vectorなどが用意された
■ 独自の参照カウントを採用している都合でstd::vectorとは違う
■ C++標準のスマートポインタの採用は見送られたけどしかたないね
その他諸々のC++への歩み寄り
10. ?Poppin Games Japan Co., Ltd. All Right Reseved
● ver3系への移行の全般的な話
● ラベルのレンダリング
● タッチイベントの処理
ver2系からver3系への移行の実際
11. ?Poppin Games Japan Co., Ltd. All Right Reseved
割とすんなり移行可能で、おおむね置換してくだけで動くようになる。
● CCFooBarもDeprecatedの警告が出るもののだいたい使用可能
● 警告は単に置換するだけでほとんど消せる
● Menuとかもそのまま動く
● CocosBuilderやCocos Studioのデータもつかえる
● 定数の宣言がちょっと変わった
○ これもほぼ置換するだけでok
ver3系への移行の全般的な話
12. ?Poppin Games Japan Co., Ltd. All Right Reseved
新しいLabelクラスを使うときいくらか気をつけるべきことが
● FreeTypeでレンダリングする場合、OSのレンダリングエンジンが表示してくれて
た文字は出ない
○ 絵文字とか出したい場合はシステムにレンダリングさせる
● iOSでシステムのフォントレンダラー使うと、空白を含むラベルが正しく作られな
い場合がある
○ iOSがNSStringをcharから作る際に空白文字がノーブレークスペースに置
換されてる
■ でもこれはなんて言うかiOSが悪いと思う
● シャドーや縁取りの機能がまだやや怪しい気がする …
ラベルのレンダリング
13. ?Poppin Games Japan Co., Ltd. All Right Reseved
● タッチイベントディスパッチャーが無くなった
● LayerのonTouchBeganなどをオーバーライドして使っていた場合、警告は出る
が一応動く
○ ただしタッチ優先度を後からいじれない
■ タッチ優先度を見た目と一致させていた場合、ほぼトラブルにならない
はず
● ちゃんと書き直すなら、イベントディスパッチャーにタッチイベントのハンドラを登
録していくことになる
タッチイベントの処理