20150108 cocos2d x-talk

14
Poppin Games Japan Co., Ltd. All Right Reseved Cocos2d-x ver3系への 移行とメリット ポッピンゲームズジャパン株式会社 CTO 小林 敬介

Transcript of 20150108 cocos2d x-talk

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

Cocos2d-x ver3系への移行とメリット

ポッピンゲームズジャパン株式会社 CTO小林 敬介

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

小林の自己紹介

● ポッピンゲームズジャパン株式会社 CTO● 1985年うまれ

ポッピンゲームズの主な開発タイトル紹介

● DRAGON SKY● ドラゴンシャウト● ピーターラビットガーデン● 新アリスの不思議なティーパーティー

詳しくは弊社ウェブサイトをご覧ください

http://poppin-games-japan.com

発表者 紹介

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

今日は保守性向上の話をメインに

● 保守性の向上

○ コールバックがC++のラムダ式になった

○ タッチイベントの優先度が見た目と一致するようになった

○ std::stringが文字列表現の基本になった

○ 64bitに対応してる

○ TrueTypeFontレンダリングエンジンの同梱

○ その他諸々のC++への歩み寄り

● 新機能

○ 3Dモデルの表示、WebViewが使えるようになった etc

cocos2d-x ver3系への移行のメリット

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

std::functionが主流になった

(いままでのCCCallFuncなども一応使える)

● ごく単純な処理のためにメソッドを追加する必要がない

● 自由度も高い

○ コールバック生成時に値をキャプチャしたり

○ std::bindで引数をバインドしたり

ver2系でもC++11を有効にした上でstd::functionをよびだしてくれるActionを自分で定義すれば似たようなことできるけどね

コールバックがC++のラムダ式になった

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

タッチイベントの発動順序をNodeのZオーダーから決められるように

● タッチプライオリティを自分で決めなくていい

○ 見た目上手前にあるNodeから先にイベントが処理される

○ そこで処理をswallowすれば背後のイベントは実行されない

● 複数層になるUIが作りやすい

○ ダイアログを出して画面内のその他のタッチを無効化する、とかも楽

タッチイベントの優先度が見た目と一致するようになった

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

char*やCCStringはほぼ使わなくなった

● ラベルに文字列を設定するときに.c_str()とかしなくていい

● CCStringとchar*とstd::stringで行ったり来たりしないで(概ね)よい

● printfフォーマットによるstd::stringの生成支援のためStringUtils::formatなんて

のもいる

std::stringが文字列表現の基本になった

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

アップルが64bit対応の強制を発表したけどこれで安心

…と思ったらver2系も対応しました

(ただフォーラムが結構荒ぶってたので今後もver2系に同様のサポートが続くとは期待しないほうがいいと思う)

64bitに対応してる

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

レンダリング結果がOS間で同じになる

● FreeTypeライブラリが使われるようになった

○ AndroidとiOS7&8とiOS6.1以前でレンダリング結果が違うことがあった問

題がぐっと改善

○ ただし、OSがよしなにやってくれていた絵文字の処理はされない

● これまで通りOSのレンダリングエンジンを使うことも可能

TrueTypeFontレンダリングエンジンの同梱

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

C++らしいコードが書きやすくなりました。

● CCプレフィックスの削除

○ CCNodeはNode、CCLayerはLayerに● メソッドや引数へのconstの付与

● CCArrayやCCDictionaryを使わない

○ アクションシーケンスの定義などでCCArrayを作る必要がなくなった

○ かわりにcocos2d::Vectorなどが用意された

■ 独自の参照カウントを採用している都合でstd::vectorとは違う■ C++標準のスマートポインタの採用は見送られたけどしかたないね

その他諸々のC++への歩み寄り

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

● ver3系への移行の全般的な話

● ラベルのレンダリング

● タッチイベントの処理

ver2系からver3系への移行の実際

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

割とすんなり移行可能で、おおむね置換してくだけで動くようになる。

● CCFooBarもDeprecatedの警告が出るもののだいたい使用可能

● 警告は単に置換するだけでほとんど消せる

● Menuとかもそのまま動く

● CocosBuilderやCocos Studioのデータもつかえる

● 定数の宣言がちょっと変わった

○ これもほぼ置換するだけでok

ver3系への移行の全般的な話

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

新しいLabelクラスを使うときいくらか気をつけるべきことが

● FreeTypeでレンダリングする場合、OSのレンダリングエンジンが表示してくれて

た文字は出ない

○ 絵文字とか出したい場合はシステムにレンダリングさせる

● iOSでシステムのフォントレンダラー使うと、空白を含むラベルが正しく作られな

い場合がある

○ iOSがNSStringをcharから作る際に空白文字がノーブレークスペースに置

換されてる■ でもこれはなんて言うかiOSが悪いと思う

● シャドーや縁取りの機能がまだやや怪しい気がする …

ラベルのレンダリング

ⒸPoppin Games Japan Co., Ltd. All Right Reseved

● タッチイベントディスパッチャーが無くなった

● LayerのonTouchBeganなどをオーバーライドして使っていた場合、警告は出る

が一応動く

○ ただしタッチ優先度を後からいじれない

■ タッチ優先度を見た目と一致させていた場合、ほぼトラブルにならない

はず

● ちゃんと書き直すなら、イベントディスパッチャーにタッチイベントのハンドラを登

録していくことになる

タッチイベントの処理

ⒸPoppin Games Japan Co., Ltd. All Right Reseved