SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
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.	
  
ご清聴ありがとうございました	
  

Contenu connexe

Tendances

「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側Takeshi HASEGAWA
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例sairoutine
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
通信対戦ゲームを作った話
通信対戦ゲームを作った話通信対戦ゲームを作った話
通信対戦ゲームを作った話mipsparc
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発m ishizaki
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
DAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebminingDAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebminingTokoroten Nakayama
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜UnityTechnologiesJapan002
 
【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方
【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方
【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方UnityTechnologiesJapan002
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能Yoshifumi Kawai
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計sairoutine
 
ユーザーストーリーの分割
ユーザーストーリーの分割ユーザーストーリーの分割
ユーザーストーリーの分割Arata Fujimura
 
正しいものを正しくつくる
正しいものを正しくつくる正しいものを正しくつくる
正しいものを正しくつくるtoshihiro ichitani
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~Kenji Hiranabe
 
Basic of Basics of Agile Development Returns
Basic of Basics of Agile Development ReturnsBasic of Basics of Agile Development Returns
Basic of Basics of Agile Development ReturnsNaoto Nishimura
 

Tendances (20)

「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側
 
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
通信対戦ゲームを作った話
通信対戦ゲームを作った話通信対戦ゲームを作った話
通信対戦ゲームを作った話
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発Visual Studio Code で C# でのアプリ開発
Visual Studio Code で C# でのアプリ開発
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
DAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebminingDAUを評価指標から捨てた会社の話 #tokyowebmining
DAUを評価指標から捨てた会社の話 #tokyowebmining
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方
【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方
【Unite Tokyo 2019】バンダイナムコスタジオ流Unityの使い方
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
ユーザーストーリーの分割
ユーザーストーリーの分割ユーザーストーリーの分割
ユーザーストーリーの分割
 
正しいものを正しくつくる
正しいものを正しくつくる正しいものを正しくつくる
正しいものを正しくつくる
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
Basic of Basics of Agile Development Returns
Basic of Basics of Agile Development ReturnsBasic of Basics of Agile Development Returns
Basic of Basics of Agile Development Returns
 

En vedette

DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてMakoto Haruyama
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方dena_study
 
FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化dena_study
 
Cocos2d js セットアップ for windows
Cocos2d js セットアップ for windowsCocos2d js セットアップ for windows
Cocos2d js セットアップ for windows健一 茂木
 
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門Kohki Miki
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装dena_study
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)dena_study
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Rubydena_study
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)dena_study
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
 
FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてdena_study
 
Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発dena_study
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術dena_study
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門dena_study
 

En vedette (15)

DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
 
FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方FINAL FANTASY Record Keeper の作り方
FINAL FANTASY Record Keeper の作り方
 
FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化FFRK cocos2d xレイヤーの最適化
FFRK cocos2d xレイヤーの最適化
 
Cocos2d js セットアップ for windows
Cocos2d js セットアップ for windowsCocos2d js セットアップ for windows
Cocos2d js セットアップ for windows
 
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
cocos2d-x 3.0 + C++11で始めるゲーム開発超入門
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
 
制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)制作を支えたツール達 (パズル戦隊デナレンジャー)
制作を支えたツール達 (パズル戦隊デナレンジャー)
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
FINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについてFINAL FANTASY
 Record Keeper 演出データについて
FINAL FANTASY
 Record Keeper 演出データについて
 
Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発Unityで本格戦国シュミレーションRPG 開発
Unityで本格戦国シュミレーションRPG 開発
 
FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
ガールアックス マルチプレイのリアルタイム通信ゲーム開発入門
 

Similaire à DeNA流cocos2d xとの付き合い方

Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)TIS Inc.
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例gree_tech
 
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”Drecom Co., Ltd.
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)denatech2016
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconDeNA
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~Web Technology Corp.
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1MinGeun Park
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developer Camp 2012 Japan Fall
 
Dev camp2012jpn day2special
Dev camp2012jpn day2specialDev camp2012jpn day2special
Dev camp2012jpn day2specialKatsuhito Katoh
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングRyohei Kamiya
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2Yushi_Takagi
 
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)DeNA Games Tokyo
 
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Koyo Takenoshita
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Shunsuke Maeda
 
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容Tomokazu Kizawa
 

Similaire à DeNA流cocos2d xとの付き合い方 (20)

Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
 
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
 
[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1[141004] cedec 2014 참관기 & 강연 리뷰 #1
[141004] cedec 2014 참관기 & 강연 리뷰 #1
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
Developr Camp 2012 Japan Fall Day2 Special Session - Visual Studio 2012 で始める ...
 
Dev camp2012jpn day2special
Dev camp2012jpn day2specialDev camp2012jpn day2special
Dev camp2012jpn day2special
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 
devsami kansai 2012 #c2
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
 
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
なぜ私たちは「効率化」を目指すのか(DeNA Games Tokyo)
 
Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下Mbed祭り 2017@春の新横浜 20170225 竹之下
Mbed祭り 2017@春の新横浜 20170225 竹之下
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
Wndows 10 Fall Creators Update Insider Previewから見たアップデート内容
 

DeNA流cocos2d xとの付き合い方

  • 1. Copyright  (C)  DeNA  Co.,Ltd.  All  Rights  Reserved.   DeNA流流   cocos2d-­‐xとの付き合い⽅方   [20-‐‑‒D-‐‑‒6]   株式会社ディー・エヌ・エー   Japanリージョン  ゲーム事業本部   技術・編成部  開発基盤グループ   惠良良  和隆  kazutaka.era@dena.com  
  • 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.   ご清聴ありがとうございました