SlideShare a Scribd company logo
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
DeNA流流	
  
cocos2d-­‐xとの付き合い⽅方	
  
[20-‐‑‒D-‐‑‒6]	
  
株式会社ディー・エヌ・エー	
  
Japanリージョン	
  ゲーム事業本部	
  
技術・編成部	
  開発基盤グループ	
  
惠良良	
  和隆	
  kazutaka.era@dena.com	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
⾃自⼰己紹介	
  
!  惠良良和隆(えら	
  かずたか)	
  
⁃  2002年年	
  株式会社フロム・ソフトウェア⼊入社	
  
•  コンソールゲームの開発(クライアント、サーバー)	
  
•  ライブラリ、フレームワークの開発	
  
•  開発環境構築	
  
•  etc	
  
⁃  2013年年10⽉月	
  株式会社ディー・エヌ・エー⼊入社	
  
•  ゲームアプリ開発に必要なライブラリやフレームワーク、
サーバーなどの開発するグループに所属	
  
•  ゲーム開発のワークフロー整備	
  
•  cocos2d-‐‑‒xをベースとした社内ゲームエンジンの開発	
  
•  ゲームシステムのアーキテクチャアドバイザー	
  
•  etc	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
アジェンダ	
  
!  cocos2d-‐‑‒xとは?	
  
!  OSSと独⾃自拡張	
  
!  cocos2d-‐‑‒xを使ったDeNA内製エンジン	
  
⁃  Kickmotor	
  
⁃  LiftEngine	
  
!  今後の展望	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
cocos2d-­‐xとは?	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
cocos2d-­‐xとは?	
  
!  Open	
  Source	
  
⁃  MITライセンス	
  
!  2Dグラフィックスに特化したゲームエンジン	
  
⁃  3Dグラフィックスのための機能も実装され始めた	
  
!  ほとんどC++で書かれている	
  
!  OpenGL(ES)で描画	
  
!  マルチプラットフォーム対応	
  
⁃  モバイル:iOS/Android/WindowsPhone	
  
⁃  デスクトップ:Windows/Mac	
  OS	
  X	
  
!  今の最新バージョンは、3.4	
  or	
  2.2.6	
  
!  詳しくは以下を参照	
  
⁃  http://www.cocos2d-‐‑‒x.org/products#cocos2dx	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
cocos2d-­‐xを使うメリット	
  
!  C++でゲームを実装	
  
⁃  複雑な処理理でも実⾏行行速度度が低下しにくい	
  
!  すべてのソースコードにアクセスできる	
  
⁃  何か問題が起きても⾃自分で対応できる	
  
⁃  拡張し放題	
  
!  マルチプラットフォーム対応	
  
⁃  スマホアプリならiOS/Androidへの両⽅方に対応したい	
  
⁃  全部⾃自分で作れなくも無いけど⼤大変	
  
!  市井のツールを利利⽤用しやすい	
  
⁃  SpriteStudio	
  
⁃  Spine	
  
⁃  CocosBuilder	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Unityじゃダメなの?	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Unityじゃだめなの?	
  
!  だめじゃない	
  
⁃  Unityでも2Dゲームは作れる	
  
⁃  だけど・・・	
  
!  凝ったことをやろうとすると、ネイティブ実装が必要になる	
  
⁃  複雑で重い処理理	
  
⁃  特殊なネイティブAPI	
  
!  ゲーム開発者は凝ったことをやりたがる	
  
⁃  汎⽤用な機能で特殊な要件には対応しづらい	
  
⁃  ⼤大抵はパフォーマンスの問題に発展	
  
!  ある程度度の技術⼒力力と⼯工数があるのであれば
独⾃自拡張出来るOSSゲームエンジンの魅⼒力力は⼤大きい	
  
⁃  それなりに⼤大変だけど・・・	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
OSSと独⾃自拡張	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
独⾃自拡張	
  
!  OSSを利利⽤用する最⼤大の理理由	
  
!  ⾃自分たちの要件に合わせてカスタマイズ	
  
⁃  ⾼高度度で複雑な機能	
  
⁃  ⾼高い実⾏行行効率率率	
  
⁃  プラットフォームが提供する機能	
  
⁃  技術競争⼒力力をアドオン出来る	
  
!  バグが⾒見見つかっても⾃自分で治せる	
  
⁃  特殊な条件でしか発⽣生しない不不具合も多数ある	
  
⁃  OSSでも潜在バグは多々ある	
  
ただし、独⾃自拡張は諸刃の剣	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
独⾃自拡張のデメリット	
  
!  オリジナルの進化を取り込み⾟辛くなる	
  
⁃  ⾃自分たちの更更新とオリジナルの更更新が⼲干渉	
  
⁃  場合によっては⼿手作業でのマージが必要になる	
  
⁃  更更新が頻繁なものほど取り込むための⼿手間が⼤大きくなる	
  
!  どのように対応するか?	
  
⁃  ある程度度安定したバージョンを使⽤用する	
  
⁃  本当に必要な時だけオリジナルの更更新を取り込む	
  
⁃  不不具合修正などだけCherry	
  Pickする	
  
⁃  オリジナルの流流れと決別する	
  
おそらく、cocos2d-­‐x	
  2系を使う理理由のほとんどはコレ	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
cocos2d-­‐xを使った	
  
DeNA内製エンジン	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Kickmotor	
  
!  WebViewとcocos2d-‐‑‒xを組み合わせたハイブリッドアプリ開発⽤用フ
レームワーク	
  
!  cocos2d-‐‑‒x上に構築した独⾃自アニメーションエンジンによるリッチな演
出機能と、WebViewによるコンテンツ更更新性を両⽴立立させる	
  
!  ネイティブ実装されたキャッシュ機構によりダウンロード量量を削減	
  
!  様々な外部SDKも組み合わせてより⾼高機能に	
  
!  採⽤用タイトル	
  
⁃  D.O.T.	
  
⁃  三国志ロワイヤル	
  
⁃  FINAL	
  FANTASY	
  Record	
  Keeper	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
ネイティブ
キャッシュ	
  
WebView・ネイティブブリッジ	
  
Kickmotorのアーキテクチャ	
  
iOS/Android	
  
ネイティブ	
  
アニメーション	
  
他SDK	
  
cocos2d-­‐x	
  
WebView	
  
ゲーム	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Kickmotorのレイヤー構造	
  
!  WebViewの上にcocos2d-‐‑‒xのOpenGLレイヤーを重ねている	
  
⁃  OpenGLレイヤーは必ずα=0でクリアされる	
  
WebView Layer
透過OpenGL Layer
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Kickmotorにおけるcocos2d-­‐x拡張	
  
!  ベースバージョンは、2.1系	
  
!  デザイナが表現したいものを作れるように拡張	
  
⁃  CCNodeがRGBとα値を伝搬可能に	
  
⁃  アンカーポイント設定が⼦子ノードの座標に影響しないように修正	
  
⁃  独⾃自のキーフレームアニメーション実装	
  
•  ⾊色、α、サイズ、位置、スケール、向き、テクスチャ、UV、etc	
  
⁃  独⾃自のパーティクルシステム実装	
  
•  MotionStreak	
  
•  ゆらぎ	
  
•  Attractor	
  
!  様々な最適化	
  
⁃  ⾃自動スプライトバッチ描画	
  
⁃  シーングラフトラバースの負荷を下げる⼯工夫	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Kickmotorにおけるcocos2d-­‐x拡張	
  
!  ほとんどがcocos2d-‐‑‒xの作法に則った拡張	
  
⁃  派⽣生クラスを実装することで機能拡張	
  
!  オリジナルコードに対する修正は少ない	
  
⁃  今のところは・・・	
  
⁃  最適化すればするほど修正量量は増える	
  
!  OpenGL描画に関連しない機能は、WebView・ネイティブブリッジで
実装されるため、cocos2d-‐‑‒x⾃自体にはそれほど⼿手が加えられていない	
  
⁃  動画再⽣生	
  
⁃  Facebook/Twitter連携	
  
⁃  課⾦金金	
  
⁃  Crittercism	
  
⁃  etc	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Kickmotorの参考資料料	
  
!  http://cedil.cesa.or.jp/session/detail/1047	
  
!  http://www.slideshare.net/dena_̲study/20141111-‐‑‒dena-‐‑‒study21	
  
!  http://next.rikunabi.com/tech/docs/ct_̲s03600.jsp?
p=002421&tcs=pickup	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engine	
  
!  cocos2d-‐‑‒xをベースとする2Dゲームエンジン	
  
!  市井のツールを活⽤用出来るようにcocos2d-‐‑‒xの基本仕様は維持	
  
!  ⾼高パフォーマンス	
  
!  ⾼高い表現⼒力力	
  
!  アプリ開発を効率率率化するための各種機能	
  
!  マルチスレッドによる各種⾮非同期APIの実装	
  
!  内製サウンドエンジンDeAL	
  
!  アプリケーション開発者はcocos2d-‐‑‒xを意識識しない	
  
!  ネイティブアプリ開発経験の少ない開発者のお⼿手本としての実装	
  
⁃  ゲーム本体もC++で実装する	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engine採⽤用タイトル	
  
!  パズル戦隊デナレンジャー(近⽇日リリース予定)	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  cocos2d-‐‑‒xの基本仕様は維持	
  
⁃  SpriteStudio、CocosBuilderなどのツールを活⽤用出来る	
  
⁃  パズル戦隊デナレンジャーでもこれらのツールを活⽤用	
  
!  ⾼高パフォーマンス	
  
⁃  C++実装レベルでの無駄を徹底的に除去	
  
⁃  独⾃自実装された⾃自動スプライトバッチ描画機能	
  
⁃  ピクセルフィルの負荷を下げるための機能	
  
⁃  シェーダ最適化	
  
⁃  SpriteStudioの再⽣生エンジンも完全独⾃自実装	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  独⾃自実装された⾃自動スプライトバッチ描画機能	
  
⁃  CocosBuilder等で作られたデータでもバッチ描画される	
  
多くのスプライトが	
  
1回のどローコールで
描画されているが、	
  
CocosBuilder上では特
に設定する必要なし	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  ピクセルフィルの負荷を下げるための機能	
  
⁃  静的な背景描画を1つのテクスチャに焼きこんで、1つのスプライ
ト描画にまとめる	
  
•  CCRenderTextureを活⽤用するための機能	
  
•  テクスチャの⽣生成は⼀一回⽬目の描画のみ	
  
⁃  glClearを呼ばない	
  
•  背景画像を描画するので無意味	
  
!  シェーダ最適化	
  
⁃  cocos2d-‐‑‒xに含まれるシェーダは物凄くシンプルで
最適化する余地はほとんどない	
  
⁃  外部ライブラリで実装されたシェーダが重い	
  
•  動的分岐をカジュアルに使⽤用	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  SpriteStudioの再⽣生エンジンも完全独⾃自実装	
  
⁃  標準プレイヤーが重すぎる	
  
•  バッチ描画出来ないパターンが多い	
  
⁃  カラーブレンドや頂点アニメーションが使⽤用されている場合	
  
⁃  cocos2d-‐‑‒x標準のバッチ描画機能が使えない際にはバッチ描画されない	
  
•  SpriteStudio専⽤用のカスタム仕様CCSpriteBatchNodeを実装	
  
⁃  カラーブレンドや頂点アニメーションがあってもバッチ描画できる	
  
•  シェーダが重い	
  
⁃  三項演算⼦子を3つも使⽤用している!	
  
⁃  動的分岐を排除し、できるだけ頂点シェーダで処理理するように	
  
標準プレイヤーに対して10倍以上の⾼高速化を実現!	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  SpriteStudioの再⽣生エンジンも完全独⾃自実装	
  
!  エフェクト系アニメーションで多⽤用されるαブレンドの多⽤用がバッチ描画を阻害	
  
αブレンド設定:A	
  
αブレンド設定:B	
  
αブレンド設定:B	
  
αブレンド設定:A	
  
描画順序は下から上	
  
パーツ0	
  
パーツ1	
  
パーツ3	
  
パーツ2	
  
αブレンド設定の異異なるスプライト描画が交互に来るので、	
  
1つのドローコールに纏められない	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  パズルゲームでは以下のようなレイアウトもあり得る	
  
ドローコールが	
  
100になる!	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  SpriteStudioの並列列描画機能	
  
25個のパーツ3	
  
25個のパーツ2	
  
25個のパーツ1	
  
25個のパーツ0	
  
描画順序	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  SpriteStudioの並列列描画機能	
  
25個のパーツ3	
  
25個のパーツ2	
  
25個のパーツ1	
  
25個のパーツ0	
  
描画順序	
  
ドローコール数が	
  100	
  →	
  4	
  に!	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  SpriteStudioの並列列描画機能	
  
⁃  並列列描画グループノードを作成	
  
•  配下のSpriteStudio描画が⾃自動的に並列列描画される	
  
※この並列列描画のアルゴリズムは特許出願中	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  ⾼高い表現⼒力力	
  
⁃  Kickmotorでも使われたアニメーションエンジンの最新バージョン
の実装	
  
•  ⾼高度度なパーティクルエンジン	
  
•  様々なアニメーション表現	
  
⁃  SpriteStudioで作成されたアニメーションを⼤大量量表⽰示可能	
  
•  標準プレイヤー⽐比で数倍〜~数⼗十倍の性能	
  
⁃  拡張されたTrueTypeフォントラベル	
  
•  XMLタグ指定によって動的にラベルプロパティを変更更可能	
  
•  1つのラベルで下のような表現が可能	
  
1つのラベルの中でサイズを⼤大きくしたり⾊色を変えたりできます	
  
1つのラベルの中で<aUr	
  size=‘24’>サイズを⼤大きく</aUr>したり	
  
<aUr	
  color=‘FF0000’>⾊色を変えたり</aUr>できます	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  アプリ開発を効率率率化するための機能	
  
⁃  独⾃自メモリ管理理機構	
  
•  メモリリーク	
  
•  バッファオーバーラン、解放後メモリ書き込みの検出	
  
⁃  デバッグメニュー	
  
•  アプリケーション毎に拡張が⽤用意なタッチ操作のためのデバッグメニュー	
  
⁃  ⾼高度度なロギング機能	
  
•  OSSのロギングライブラリを組み込み	
  
⁃  動的なアセット更更新を可能にするファイルサーバー機能	
  
⁃  プロファイル機能	
  
•  カテゴリ毎に独⽴立立して計測	
  
•  計測区間の重複があっても正しく計測	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  独⾃自メモリ管理理機構	
  
⁃  メモリの確保、解放をすべて独⾃自のAPIに置き換え	
  
•  Instrumentsが使えない場合のメモリリーク検出機構	
  
•  メモリ確保・解放⽤用マクロを⽤用意	
  
⁃  メモリの確保場所(ソースファイルパス、⾏行行番号)を特定したい	
  
⁃  global	
  new/deleteの置き換えでは不不⾜足	
  
⁃  確保メモリの前後に緩衝領領域を配置	
  
•  オーバーランしていないか判定(書き込み系のみ)	
  
⁃  メモリ破壊を検出するために、メモリ解放を遅らせる機能	
  
1.  アプリケーションが解放したタイミングでメモリフィルし、
解放待ちキューに登録	
  
2.  解放待ちキューの⻑⾧長さが⼀一定以上になるとキューの先頭から順次解放処理理	
  
3.  解放処理理時にメモリフィルした内容が書き換えられていないかチェック	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  デバッグメニュー	
  
⁃  コンソールゲーム開発では良良くある機能	
  
⁃  開発中に必要な特殊操作を⾏行行うためのメニューを表⽰示	
  
⁃  ただし、ゲームプレイを邪魔してはならない	
  
この部分	
  
普段は⾒見見えない	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  ⾼高度度なロギング機能	
  
⁃  cocos2d-‐‑‒xのログは基本的にprintfのみ	
  
⁃  カテゴリ毎にログ出⼒力力のON/OFFを制御したい	
  
⁃  PCに接続しない状態で実⾏行行している時のログを
ファイルに保存したい	
  
⁃  log4cplusを導⼊入	
  
•  開発中ビルドでのみ使⽤用	
  
!  動的なアセット更更新を可能にするファイルサーバー機能	
  
⁃  WiFi経由で端末側アプリ・PC間でファイルのやりとりを⾏行行う	
  
⁃  データ確認のためにipa/apkを更更新しなくても良良い	
  
⁃  USBでの接続、外部サーバー経由での接続の仕組みも検討中	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  プロファイル機能	
  
⁃  cocos2d-‐‑‒xのCCProfilerは⽂文字列列をキーとして区間集計するが、
計測区間が重複していることを考慮していない	
  
⁃  カテゴリAの計測区間の中に別のカテゴリB、Cの計測区間がある場
合、下図のように重複して計測しないようにする機能を独⾃自実装	
  
⁃  カテゴリ毎に集計されたプロファイル結果は、画⾯面上に⽂文字もしく
はパフォーマンスゲージとして常に表⽰示	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  プロファイル機能	
  
数字による表⽰示	
  
ゲージによる表⽰示	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  マルチスレッドによる各種⾮非同期APIの実装	
  
⁃  cocos2d-‐‑‒xのリソース読み込みはほとんどが同期読み込み	
  
•  ファイル読み込みが⾛走るとゲームが⼀一瞬⽌止まる	
  
⁃  独⾃自スレッドで読み込み処理理を⾏行行うリソース読み込み機能の実装	
  
⁃  汎⽤用的な⾮非同期処理理実装のための仕組みと、⾮非同期処理理待ち合わせ
のための仕組みを提供	
  
⁃  cocos2d-‐‑‒xはスレッドセーフではないため、必要なところは個別に
スレッドセーフ化	
  
⁃  マルチスレッド実装のための各種APIラッパー	
  
•  アプリケーションがpthreadなどのAPIを直接使わない	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  内製サウンドエンジンDeAL	
  
⁃  cocos2d-‐‑‒x標準のサウンド機能は貧弱	
  
•  iOSとAndroidで実装が全然違う	
  
⁃  ゲームの演出要素としてコンソールゲーム並のサウンド演出を⼊入れ
るためには機能が全然⾜足りない	
  
⁃  ⾃自分たちの要件に合わせて機能を拡張できるように独⾃自実装	
  
⁃  WAV/Ogg	
  Vorbis/Opusなどのフォーマットに対応	
  
⁃  SEの種類毎にボリュームや同時発⾳音数を設定可能	
  
⁃  ストリーム再⽣生、オンメモリ再⽣生、デコード済みオンメモリ再⽣生	
  
⁃  ミキサー機能	
  
⁃  2D/3D	
  Panning機能	
  
⁃  BGMのポイントループ再⽣生	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineの特徴	
  
!  アプリケーション開発者はcocos2d-‐‑‒xを意識識しない	
  
⁃  ゲームを作る上で必要な基本機能を提供	
  
⁃  cocos2d-‐‑‒xの使いにくいところ、実装の⼿手間が増えるところを
カバーするための機能を多数提供	
  
•  暗号化(ファイル、メモリ)	
  
•  GUIコンポーネント	
  
•  ローカル通知	
  
•  テキスト⼊入⼒力力ダイアログ	
  
•  クリップボード操作	
  
•  WebView表⽰示	
  
•  動画再⽣生	
  
!  ネイティブアプリ開発経験の少ない開発者のお⼿手本としての実装	
  
⁃  豊富なコメント	
  
⁃  シンプルで⾒見見通しの良良い実装	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
Li7	
  Engineにおけるcocos2d-­‐x拡張	
  
!  ベースバージョンは、2.2系	
  
!  ほぼすべてのソースファイルが書き換えられている	
  
⁃  new/delete、malloc/freeの置き換え	
  
⁃  コード最適化	
  
⁃  使わない機能の除去(⾃自分たちが絶対に使わないコードの除去)	
  
⁃  ログ出⼒力力置き換え	
  
⁃  64bit対応(iOS)	
  
⁃  様々な機能追加	
  
!  cocos2d-‐‑‒xの2.2系はすでに枯れていて⼤大きな機能追加は無い	
  
⁃  どうしても取り込みたい修正だけCherryPick	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
今後の展望	
  
!  今後もcocos2d-‐‑‒x	
  2系を拡張し続ける	
  
⁃  Lift	
  EngineだけでなくKickmotorも継続的に進化していく	
  
!  Lift	
  Engineは、より積極的に拡張し続ける	
  
⁃  ゲーム開発をより効率率率化するための拡張	
  
•  より効率率率的にTry&Errorするための仕組み	
  
•  スクリプトエンジンの導⼊入	
  
⁃  cocos2d-‐‑‒x	
  +	
  Lua	
  ではなく、使⽤用⽅方法を限定した形とすることで
パフォーマンス低下を防ぐ	
  
⁃  さらなる最適化	
  
•  テクスチャのランタイムパッキング	
  
⁃  さらなる表現⼒力力	
  
•  3D描画機能	
  
⁃  ⽤用途を明確にした機能を実装する	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
今後の展望	
  
!  cocos2d-‐‑‒x	
  3系への置き換え	
  
⁃  ⼤大きなメリットがあれば	
  
⁃  ほとんどは機能の取り込みで対応できると予想	
  
⁃  ベースとなる技術が枯れていることは重要	
  
⁃  今のところ3系に置き換える必要性を感じていない	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
まとめ	
  
!  DeNAではcocos2d-‐‑‒xを積極的に活⽤用	
  
!  Kickmotorはアニメーション表現に特化したcocos2d-‐‑‒xの拡張を適⽤用	
  
!  cocos2d-‐‑‒xをベースにしたLift	
  Engineを新規開発した	
  
!  ゲームの要件に合わせた機能拡張は躊躇せずどんどんやる	
  
!  今後もKickmotor/Lift	
  Engineのcocos2d-‐‑‒xも独⾃自の進化を遂げる	
  
Copyright	
  (C)	
  DeNA	
  Co.,Ltd.	
  All	
  Rights	
  Reserved.	
  
ご清聴ありがとうございました	
  

More Related Content

DeNA流cocos2d xとの付き合い方

  • 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   DeNA流流   cocos2d-­‐xとの付き合い⽅方   [20-‐‑‒D-‐‑‒6]   株式会社ディー・エヌ・エー   Japanリージョン  ゲーム事業本部   技術・編成部  開発基盤グループ   惠良良  和隆  [email protected]  
  • 2. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ⾃自⼰己紹介   !  惠良良和隆(えら  かずたか)   ⁃  2002年年  株式会社フロム・ソフトウェア⼊入社   •  コンソールゲームの開発(クライアント、サーバー)   •  ライブラリ、フレームワークの開発   •  開発環境構築   •  etc   ⁃  2013年年10⽉月  株式会社ディー・エヌ・エー⼊入社   •  ゲームアプリ開発に必要なライブラリやフレームワーク、 サーバーなどの開発するグループに所属   •  ゲーム開発のワークフロー整備   •  cocos2d-‐‑‒xをベースとした社内ゲームエンジンの開発   •  ゲームシステムのアーキテクチャアドバイザー   •  etc  
  • 3. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   アジェンダ   !  cocos2d-‐‑‒xとは?   !  OSSと独⾃自拡張   !  cocos2d-‐‑‒xを使ったDeNA内製エンジン   ⁃  Kickmotor   ⁃  LiftEngine   !  今後の展望  
  • 4. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   cocos2d-­‐xとは?  
  • 5. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   cocos2d-­‐xとは?   !  Open  Source   ⁃  MITライセンス   !  2Dグラフィックスに特化したゲームエンジン   ⁃  3Dグラフィックスのための機能も実装され始めた   !  ほとんどC++で書かれている   !  OpenGL(ES)で描画   !  マルチプラットフォーム対応   ⁃  モバイル:iOS/Android/WindowsPhone   ⁃  デスクトップ:Windows/Mac  OS  X   !  今の最新バージョンは、3.4  or  2.2.6   !  詳しくは以下を参照   ⁃  http://www.cocos2d-‐‑‒x.org/products#cocos2dx  
  • 6. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   cocos2d-­‐xを使うメリット   !  C++でゲームを実装   ⁃  複雑な処理理でも実⾏行行速度度が低下しにくい   !  すべてのソースコードにアクセスできる   ⁃  何か問題が起きても⾃自分で対応できる   ⁃  拡張し放題   !  マルチプラットフォーム対応   ⁃  スマホアプリならiOS/Androidへの両⽅方に対応したい   ⁃  全部⾃自分で作れなくも無いけど⼤大変   !  市井のツールを利利⽤用しやすい   ⁃  SpriteStudio   ⁃  Spine   ⁃  CocosBuilder  
  • 7. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Unityじゃダメなの?  
  • 8. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Unityじゃだめなの?   !  だめじゃない   ⁃  Unityでも2Dゲームは作れる   ⁃  だけど・・・   !  凝ったことをやろうとすると、ネイティブ実装が必要になる   ⁃  複雑で重い処理理   ⁃  特殊なネイティブAPI   !  ゲーム開発者は凝ったことをやりたがる   ⁃  汎⽤用な機能で特殊な要件には対応しづらい   ⁃  ⼤大抵はパフォーマンスの問題に発展   !  ある程度度の技術⼒力力と⼯工数があるのであれば 独⾃自拡張出来るOSSゲームエンジンの魅⼒力力は⼤大きい   ⁃  それなりに⼤大変だけど・・・  
  • 9. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   OSSと独⾃自拡張  
  • 10. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   独⾃自拡張   !  OSSを利利⽤用する最⼤大の理理由   !  ⾃自分たちの要件に合わせてカスタマイズ   ⁃  ⾼高度度で複雑な機能   ⁃  ⾼高い実⾏行行効率率率   ⁃  プラットフォームが提供する機能   ⁃  技術競争⼒力力をアドオン出来る   !  バグが⾒見見つかっても⾃自分で治せる   ⁃  特殊な条件でしか発⽣生しない不不具合も多数ある   ⁃  OSSでも潜在バグは多々ある   ただし、独⾃自拡張は諸刃の剣  
  • 11. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   独⾃自拡張のデメリット   !  オリジナルの進化を取り込み⾟辛くなる   ⁃  ⾃自分たちの更更新とオリジナルの更更新が⼲干渉   ⁃  場合によっては⼿手作業でのマージが必要になる   ⁃  更更新が頻繁なものほど取り込むための⼿手間が⼤大きくなる   !  どのように対応するか?   ⁃  ある程度度安定したバージョンを使⽤用する   ⁃  本当に必要な時だけオリジナルの更更新を取り込む   ⁃  不不具合修正などだけCherry  Pickする   ⁃  オリジナルの流流れと決別する   おそらく、cocos2d-­‐x  2系を使う理理由のほとんどはコレ  
  • 12. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   cocos2d-­‐xを使った   DeNA内製エンジン  
  • 13. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Kickmotor   !  WebViewとcocos2d-‐‑‒xを組み合わせたハイブリッドアプリ開発⽤用フ レームワーク   !  cocos2d-‐‑‒x上に構築した独⾃自アニメーションエンジンによるリッチな演 出機能と、WebViewによるコンテンツ更更新性を両⽴立立させる   !  ネイティブ実装されたキャッシュ機構によりダウンロード量量を削減   !  様々な外部SDKも組み合わせてより⾼高機能に   !  採⽤用タイトル   ⁃  D.O.T.   ⁃  三国志ロワイヤル   ⁃  FINAL  FANTASY  Record  Keeper  
  • 14. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ネイティブ キャッシュ   WebView・ネイティブブリッジ   Kickmotorのアーキテクチャ   iOS/Android   ネイティブ   アニメーション   他SDK   cocos2d-­‐x   WebView   ゲーム  
  • 15. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Kickmotorのレイヤー構造   !  WebViewの上にcocos2d-‐‑‒xのOpenGLレイヤーを重ねている   ⁃  OpenGLレイヤーは必ずα=0でクリアされる   WebView Layer 透過OpenGL Layer
  • 16. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Kickmotorにおけるcocos2d-­‐x拡張   !  ベースバージョンは、2.1系   !  デザイナが表現したいものを作れるように拡張   ⁃  CCNodeがRGBとα値を伝搬可能に   ⁃  アンカーポイント設定が⼦子ノードの座標に影響しないように修正   ⁃  独⾃自のキーフレームアニメーション実装   •  ⾊色、α、サイズ、位置、スケール、向き、テクスチャ、UV、etc   ⁃  独⾃自のパーティクルシステム実装   •  MotionStreak   •  ゆらぎ   •  Attractor   !  様々な最適化   ⁃  ⾃自動スプライトバッチ描画   ⁃  シーングラフトラバースの負荷を下げる⼯工夫  
  • 17. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Kickmotorにおけるcocos2d-­‐x拡張   !  ほとんどがcocos2d-‐‑‒xの作法に則った拡張   ⁃  派⽣生クラスを実装することで機能拡張   !  オリジナルコードに対する修正は少ない   ⁃  今のところは・・・   ⁃  最適化すればするほど修正量量は増える   !  OpenGL描画に関連しない機能は、WebView・ネイティブブリッジで 実装されるため、cocos2d-‐‑‒x⾃自体にはそれほど⼿手が加えられていない   ⁃  動画再⽣生   ⁃  Facebook/Twitter連携   ⁃  課⾦金金   ⁃  Crittercism   ⁃  etc  
  • 18. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Kickmotorの参考資料料   !  http://cedil.cesa.or.jp/session/detail/1047   !  http://www.slideshare.net/dena_̲study/20141111-‐‑‒dena-‐‑‒study21   !  http://next.rikunabi.com/tech/docs/ct_̲s03600.jsp? p=002421&tcs=pickup  
  • 19. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engine   !  cocos2d-‐‑‒xをベースとする2Dゲームエンジン   !  市井のツールを活⽤用出来るようにcocos2d-‐‑‒xの基本仕様は維持   !  ⾼高パフォーマンス   !  ⾼高い表現⼒力力   !  アプリ開発を効率率率化するための各種機能   !  マルチスレッドによる各種⾮非同期APIの実装   !  内製サウンドエンジンDeAL   !  アプリケーション開発者はcocos2d-‐‑‒xを意識識しない   !  ネイティブアプリ開発経験の少ない開発者のお⼿手本としての実装   ⁃  ゲーム本体もC++で実装する  
  • 20. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engine採⽤用タイトル   !  パズル戦隊デナレンジャー(近⽇日リリース予定)  
  • 21. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  cocos2d-‐‑‒xの基本仕様は維持   ⁃  SpriteStudio、CocosBuilderなどのツールを活⽤用出来る   ⁃  パズル戦隊デナレンジャーでもこれらのツールを活⽤用   !  ⾼高パフォーマンス   ⁃  C++実装レベルでの無駄を徹底的に除去   ⁃  独⾃自実装された⾃自動スプライトバッチ描画機能   ⁃  ピクセルフィルの負荷を下げるための機能   ⁃  シェーダ最適化   ⁃  SpriteStudioの再⽣生エンジンも完全独⾃自実装  
  • 22. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  独⾃自実装された⾃自動スプライトバッチ描画機能   ⁃  CocosBuilder等で作られたデータでもバッチ描画される   多くのスプライトが   1回のどローコールで 描画されているが、   CocosBuilder上では特 に設定する必要なし  
  • 23. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  ピクセルフィルの負荷を下げるための機能   ⁃  静的な背景描画を1つのテクスチャに焼きこんで、1つのスプライ ト描画にまとめる   •  CCRenderTextureを活⽤用するための機能   •  テクスチャの⽣生成は⼀一回⽬目の描画のみ   ⁃  glClearを呼ばない   •  背景画像を描画するので無意味   !  シェーダ最適化   ⁃  cocos2d-‐‑‒xに含まれるシェーダは物凄くシンプルで 最適化する余地はほとんどない   ⁃  外部ライブラリで実装されたシェーダが重い   •  動的分岐をカジュアルに使⽤用  
  • 24. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  SpriteStudioの再⽣生エンジンも完全独⾃自実装   ⁃  標準プレイヤーが重すぎる   •  バッチ描画出来ないパターンが多い   ⁃  カラーブレンドや頂点アニメーションが使⽤用されている場合   ⁃  cocos2d-‐‑‒x標準のバッチ描画機能が使えない際にはバッチ描画されない   •  SpriteStudio専⽤用のカスタム仕様CCSpriteBatchNodeを実装   ⁃  カラーブレンドや頂点アニメーションがあってもバッチ描画できる   •  シェーダが重い   ⁃  三項演算⼦子を3つも使⽤用している!   ⁃  動的分岐を排除し、できるだけ頂点シェーダで処理理するように   標準プレイヤーに対して10倍以上の⾼高速化を実現!  
  • 25. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  SpriteStudioの再⽣生エンジンも完全独⾃自実装   !  エフェクト系アニメーションで多⽤用されるαブレンドの多⽤用がバッチ描画を阻害   αブレンド設定:A   αブレンド設定:B   αブレンド設定:B   αブレンド設定:A   描画順序は下から上   パーツ0   パーツ1   パーツ3   パーツ2   αブレンド設定の異異なるスプライト描画が交互に来るので、   1つのドローコールに纏められない  
  • 26. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  パズルゲームでは以下のようなレイアウトもあり得る   ドローコールが   100になる!  
  • 27. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  SpriteStudioの並列列描画機能   25個のパーツ3   25個のパーツ2   25個のパーツ1   25個のパーツ0   描画順序  
  • 28. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  SpriteStudioの並列列描画機能   25個のパーツ3   25個のパーツ2   25個のパーツ1   25個のパーツ0   描画順序   ドローコール数が  100  →  4  に!  
  • 29. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  SpriteStudioの並列列描画機能   ⁃  並列列描画グループノードを作成   •  配下のSpriteStudio描画が⾃自動的に並列列描画される   ※この並列列描画のアルゴリズムは特許出願中  
  • 30. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  ⾼高い表現⼒力力   ⁃  Kickmotorでも使われたアニメーションエンジンの最新バージョン の実装   •  ⾼高度度なパーティクルエンジン   •  様々なアニメーション表現   ⁃  SpriteStudioで作成されたアニメーションを⼤大量量表⽰示可能   •  標準プレイヤー⽐比で数倍〜~数⼗十倍の性能   ⁃  拡張されたTrueTypeフォントラベル   •  XMLタグ指定によって動的にラベルプロパティを変更更可能   •  1つのラベルで下のような表現が可能   1つのラベルの中でサイズを⼤大きくしたり⾊色を変えたりできます   1つのラベルの中で<aUr  size=‘24’>サイズを⼤大きく</aUr>したり   <aUr  color=‘FF0000’>⾊色を変えたり</aUr>できます  
  • 31. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  アプリ開発を効率率率化するための機能   ⁃  独⾃自メモリ管理理機構   •  メモリリーク   •  バッファオーバーラン、解放後メモリ書き込みの検出   ⁃  デバッグメニュー   •  アプリケーション毎に拡張が⽤用意なタッチ操作のためのデバッグメニュー   ⁃  ⾼高度度なロギング機能   •  OSSのロギングライブラリを組み込み   ⁃  動的なアセット更更新を可能にするファイルサーバー機能   ⁃  プロファイル機能   •  カテゴリ毎に独⽴立立して計測   •  計測区間の重複があっても正しく計測  
  • 32. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  独⾃自メモリ管理理機構   ⁃  メモリの確保、解放をすべて独⾃自のAPIに置き換え   •  Instrumentsが使えない場合のメモリリーク検出機構   •  メモリ確保・解放⽤用マクロを⽤用意   ⁃  メモリの確保場所(ソースファイルパス、⾏行行番号)を特定したい   ⁃  global  new/deleteの置き換えでは不不⾜足   ⁃  確保メモリの前後に緩衝領領域を配置   •  オーバーランしていないか判定(書き込み系のみ)   ⁃  メモリ破壊を検出するために、メモリ解放を遅らせる機能   1.  アプリケーションが解放したタイミングでメモリフィルし、 解放待ちキューに登録   2.  解放待ちキューの⻑⾧長さが⼀一定以上になるとキューの先頭から順次解放処理理   3.  解放処理理時にメモリフィルした内容が書き換えられていないかチェック  
  • 33. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  デバッグメニュー   ⁃  コンソールゲーム開発では良良くある機能   ⁃  開発中に必要な特殊操作を⾏行行うためのメニューを表⽰示   ⁃  ただし、ゲームプレイを邪魔してはならない   この部分   普段は⾒見見えない  
  • 34. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  ⾼高度度なロギング機能   ⁃  cocos2d-‐‑‒xのログは基本的にprintfのみ   ⁃  カテゴリ毎にログ出⼒力力のON/OFFを制御したい   ⁃  PCに接続しない状態で実⾏行行している時のログを ファイルに保存したい   ⁃  log4cplusを導⼊入   •  開発中ビルドでのみ使⽤用   !  動的なアセット更更新を可能にするファイルサーバー機能   ⁃  WiFi経由で端末側アプリ・PC間でファイルのやりとりを⾏行行う   ⁃  データ確認のためにipa/apkを更更新しなくても良良い   ⁃  USBでの接続、外部サーバー経由での接続の仕組みも検討中  
  • 35. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  プロファイル機能   ⁃  cocos2d-‐‑‒xのCCProfilerは⽂文字列列をキーとして区間集計するが、 計測区間が重複していることを考慮していない   ⁃  カテゴリAの計測区間の中に別のカテゴリB、Cの計測区間がある場 合、下図のように重複して計測しないようにする機能を独⾃自実装   ⁃  カテゴリ毎に集計されたプロファイル結果は、画⾯面上に⽂文字もしく はパフォーマンスゲージとして常に表⽰示  
  • 36. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  プロファイル機能   数字による表⽰示   ゲージによる表⽰示  
  • 37. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  マルチスレッドによる各種⾮非同期APIの実装   ⁃  cocos2d-‐‑‒xのリソース読み込みはほとんどが同期読み込み   •  ファイル読み込みが⾛走るとゲームが⼀一瞬⽌止まる   ⁃  独⾃自スレッドで読み込み処理理を⾏行行うリソース読み込み機能の実装   ⁃  汎⽤用的な⾮非同期処理理実装のための仕組みと、⾮非同期処理理待ち合わせ のための仕組みを提供   ⁃  cocos2d-‐‑‒xはスレッドセーフではないため、必要なところは個別に スレッドセーフ化   ⁃  マルチスレッド実装のための各種APIラッパー   •  アプリケーションがpthreadなどのAPIを直接使わない  
  • 38. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  内製サウンドエンジンDeAL   ⁃  cocos2d-‐‑‒x標準のサウンド機能は貧弱   •  iOSとAndroidで実装が全然違う   ⁃  ゲームの演出要素としてコンソールゲーム並のサウンド演出を⼊入れ るためには機能が全然⾜足りない   ⁃  ⾃自分たちの要件に合わせて機能を拡張できるように独⾃自実装   ⁃  WAV/Ogg  Vorbis/Opusなどのフォーマットに対応   ⁃  SEの種類毎にボリュームや同時発⾳音数を設定可能   ⁃  ストリーム再⽣生、オンメモリ再⽣生、デコード済みオンメモリ再⽣生   ⁃  ミキサー機能   ⁃  2D/3D  Panning機能   ⁃  BGMのポイントループ再⽣生  
  • 39. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineの特徴   !  アプリケーション開発者はcocos2d-‐‑‒xを意識識しない   ⁃  ゲームを作る上で必要な基本機能を提供   ⁃  cocos2d-‐‑‒xの使いにくいところ、実装の⼿手間が増えるところを カバーするための機能を多数提供   •  暗号化(ファイル、メモリ)   •  GUIコンポーネント   •  ローカル通知   •  テキスト⼊入⼒力力ダイアログ   •  クリップボード操作   •  WebView表⽰示   •  動画再⽣生   !  ネイティブアプリ開発経験の少ない開発者のお⼿手本としての実装   ⁃  豊富なコメント   ⁃  シンプルで⾒見見通しの良良い実装  
  • 40. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   Li7  Engineにおけるcocos2d-­‐x拡張   !  ベースバージョンは、2.2系   !  ほぼすべてのソースファイルが書き換えられている   ⁃  new/delete、malloc/freeの置き換え   ⁃  コード最適化   ⁃  使わない機能の除去(⾃自分たちが絶対に使わないコードの除去)   ⁃  ログ出⼒力力置き換え   ⁃  64bit対応(iOS)   ⁃  様々な機能追加   !  cocos2d-‐‑‒xの2.2系はすでに枯れていて⼤大きな機能追加は無い   ⁃  どうしても取り込みたい修正だけCherryPick  
  • 41. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   今後の展望   !  今後もcocos2d-‐‑‒x  2系を拡張し続ける   ⁃  Lift  EngineだけでなくKickmotorも継続的に進化していく   !  Lift  Engineは、より積極的に拡張し続ける   ⁃  ゲーム開発をより効率率率化するための拡張   •  より効率率率的にTry&Errorするための仕組み   •  スクリプトエンジンの導⼊入   ⁃  cocos2d-‐‑‒x  +  Lua  ではなく、使⽤用⽅方法を限定した形とすることで パフォーマンス低下を防ぐ   ⁃  さらなる最適化   •  テクスチャのランタイムパッキング   ⁃  さらなる表現⼒力力   •  3D描画機能   ⁃  ⽤用途を明確にした機能を実装する  
  • 42. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   今後の展望   !  cocos2d-‐‑‒x  3系への置き換え   ⁃  ⼤大きなメリットがあれば   ⁃  ほとんどは機能の取り込みで対応できると予想   ⁃  ベースとなる技術が枯れていることは重要   ⁃  今のところ3系に置き換える必要性を感じていない  
  • 43. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   まとめ   !  DeNAではcocos2d-‐‑‒xを積極的に活⽤用   !  Kickmotorはアニメーション表現に特化したcocos2d-‐‑‒xの拡張を適⽤用   !  cocos2d-‐‑‒xをベースにしたLift  Engineを新規開発した   !  ゲームの要件に合わせた機能拡張は躊躇せずどんどんやる   !  今後もKickmotor/Lift  Engineのcocos2d-‐‑‒xも独⾃自の進化を遂げる  
  • 44. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   ご清聴ありがとうございました