狠狠撸

狠狠撸Share a Scribd company logo
?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

More Related Content

20150108 cocos2d x-talk

  • 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などをオーバーライドして使っていた場合、警告は出る が一応動く ○ ただしタッチ優先度を後からいじれない ■ タッチ優先度を見た目と一致させていた場合、ほぼトラブルにならない はず ● ちゃんと書き直すなら、イベントディスパッチャーにタッチイベントのハンドラを登 録していくことになる タッチイベントの処理
  • 14. ?Poppin Games Japan Co., Ltd. All Right Reseved