braindots-開発秘話- cocos2d-x3.5 開発事例 -

61
-Cocos2d-x3.5での開発事例- 株式会社トランスリミット Cocos Talks #5 (2015/07/23)

Upload: lemon-kawabata

Post on 13-Aug-2015

1.490 views

Category:

Engineering


3 download

TRANSCRIPT

Page 1: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

-Cocos2d-x3.5での開発事例-

株式会社トランスリミット

Cocos Talks #5 (2015/07/23)

Page 2: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

会社概要 ゲーム概要 開発環境

物理ゲームの 開発

その他 苦労したこと

まとめ

Page 3: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

会社紹介

Page 4: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

提供サービス1300万DL 100万DL

Page 5: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
Page 6: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

開発環境

物理ゲームの 開発

その他 苦労したこと

まとめ

ゲーム概要会社概要

Page 7: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ゲーム概要

今度は描く脳トレ!

Page 8: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

BrainDotsの遊び方

線を描いて

ぶつける

Page 9: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

BrainDotsの遊び方

Page 10: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

BrainDotsの遊び方

ペンの種類は30種類以上

300以上のステージ

Page 11: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

プレイ動画共有

Page 12: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ユーザーのプレイ動画

Page 13: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

俺のプレイ動画

Page 14: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

グローバルで流行ると…

Page 15: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
Page 16: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

自己紹介川端 和樹

(Kawabata_Lemon)

株式会社トランスリミット 2015年度新卒入社

@Kawabata_Lemon

クライアントサイドエンジニア

Page 17: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

物理ゲームの 開発

その他 苦労したこと

まとめ

開発環境ゲーム概要会社概要

Page 18: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

開発環境

開発期間は2ヶ月ちょっと

基本的な機能 ブラッシュアップ

社内ライブラリの開発も並行して実装

Page 19: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

開発環境

Cocos2d-x

Translimit-core(社内ライブラリ)

ゲーム部分(BrainDots)

SNSシェア、通信処理、プレイ録画、 広告、サウンド、暗号化、課金、ローカライズ

Page 20: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

開発環境物理エンジン

Cocos2d-x 3.0から標準実装されている 物理エンジンを使用

こちらは使わず。

Page 21: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

開発環境

->当初は最新だった3.6をベースに開発開始

当初は最新版であったCocos2d-x3.6で開発開始したが… ピクつき問題に遭遇した

Page 22: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

開発環境->試しにCocos2d-xのcpp-testで3.5と3.6で

試してみると3.5なら発生しないことが発覚

_人人人人人人人人人人人人人人人人人_ > Cocos2d-x3.5にダウングレード <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

Page 23: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

動画共有EveryPlayを使用

->Cocosのオーディオが録音できない(Android)

->Cricket Audio Engineを導入

Page 24: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

その他 苦労したこと

まとめ

開発環境ゲーム概要会社概要

物理ゲームの 開発

Page 25: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

物理システムを使った開発

PhysicsWorld

PhysicsBody

PhysicsShape

PhysicsContact

PhysicsJoint

Cocos2d-xの物理エンジン(Chipmunk) が提供するもの

->重力とかを持つ物理世界

->オブジェクトの剛体

->剛体に含まれる単位図形

->オブジェクトとの衝突イベント

->物体を世界に繋ぎとめるもの

Page 26: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

描いたものに剛体を与えるPhysicsShapeで作成できる図形

Circle Box Polygon

この図形のみで描いた物に剛体を作る

Page 27: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

描いたものに剛体を与える

タッチした点を保存

onTouchBegan,onTouchMoved

Page 28: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

描いたものに剛体を与える

図形を図形で結ぶ

手を離したタイミングで..

onTouchEnded

Page 29: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

最適化が必要だったこの工程だと追加された点に合わせて図形が

めちゃ増える

iPod Touch 4Genで重くなるくらい 剛体の計算が辛くなった

ましてやAndroidなんて…(ボソッ

剛体を減らすような工夫が必要でした。

Page 30: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

最適化1図形の描画はするけど剛体は追加しない

見た目

剛体

なんか違和感

Page 31: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

最適化2四角形を追加する最低距離を長めに取る

あんまり長く取り過ぎたら違和感

Page 32: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

最終的に

中間の丸をすべて取り除く

結果として剛体は約半分に

->Androidのミッドレンジ端末でもまあまあ動く

Page 33: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ギミックの開発

スイッチとレーザー

ベルトコンベア

動くオブジェクト

ピン

Page 34: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

物理のイベント

onContactBegin

onContactSeparate

onContactPresolve

onContactPostSolve

物体がぶつかり合う時にはイベントが発生する

衝突したとき

離れたとき

衝突中

衝突後

Page 35: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ベルトコンベア

上に乗っているオブジェクトを加速(減速)

Page 36: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ベルトコンベアベルトコンベアに乗ったら配列に追加

Updateで配列中のオブジェクトをベルトコンベアの速度になるように調整する

onContactBegin

Page 37: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ベルトコンベア

ベルトコンベアに離れたら配列から外す

onContactSeparate

Page 38: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

スイッチとレーザー

T

ノード(スイッチ)が他のノード(レーザー) に影響を与える

Page 39: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

スイッチとレーザー

Tレーザーを先に生成して

スイッチを生成

Page 40: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

スイッチとレーザー

T

ボールとスイッチがぶつかったら

onContactBegin

Page 41: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

スイッチとレーザー

T

レーザーを消す

Page 42: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

動くオブジェクトAction(MoveByとか)で移動するオブジェクト

剛体もついてくるためアニメーションさせるだけで 簡単にリフトなどが実装できた

Page 43: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ピン(PhysicsJoint)オブジェクトを空間内に止めるためのオブジェクト

ボールが上に乗ると

Page 44: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ピン(PhysicsJoint)オブジェクトを空間内に止めるためのオブジェクト

重みで回転する

Page 45: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

動くオブジェクトとピンの注意点

PhysicsJointも、剛体のrunActionもPhysicsWorld が存在しない状態で生成すると落ちる

onEnterTransitionDidFinish()->オブジェクトのでピンを追加するようにしたり、runActionを開始

Page 46: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

まとめ

開発環境ゲーム概要会社概要

物理ゲームの 開発

その他 苦労したこと

Page 47: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

苦労したその他の点

Androidで画面が黒くなる

AndroidでClippingNodeが効かない

Page 48: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

Androidで 画面やオブジェクトが黒くなる現象は2つのパターンがあった

1.動画広告から戻ってきた時にラベルやスプライトが真っ黒になる

2.RenderTextureで生成したテクスチャが バックグラウンドからもどると…

Page 49: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

1.動画広告から戻ってきた時にラベルやスプライトが真っ黒になる

原因:動画広告のコールバック時にはOpenGLのContextが存在していなかった

Cocos

Java

動画広告

Cocos

Java

Callback

Page 50: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

解決策JavaからうけたコールバックをCocosの Scheduler処理で実行するようにした。

Director::getInstance()->getScheduler()-> schedule(CC_SCHEDULE_SELECTOR(Callback::doCallback), this, 0, false);

// Cocosのスケジューラで実行するためOpenGLの復帰後に必ず実行される

Page 51: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

2.RenderTextureで生成したテクスチャがバックグラウンドからもどると真っ黒になる

ゲーム内で使用する方眼紙の背景はRenderTextureで動的に生成している。

(端末によって解像度が違うため)

Page 52: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

->内部でキャッシュ機構を作って解像度ごとにテクスチャをマッピングして持っておくよ

うに実装した。

2.RenderTextureで生成したテクスチャがバックグラウンドからもどると…

ところがバックグラウンドに入って戻ってくるとそのテクスチャが解放されて真っ黒に

Page 53: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

原因:AndroidのOpenGLの挙動でバックグラウンド時に入った際、一旦テクスチャ情報がリセットされていた

画像ファイルから作られたテクスチャ類は復活されるが動的に生成したテクスチャは復活されない

->結局、必要な方眼パターンを初回時にRenderTextureですべて生成し画像ファイルで保存

して使うようにした。

解決策

Page 54: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

AndroidでClippingNodeが効かない

解決法1.AppActivity.javaの設定をいじる

2.RenderTextureのオプションを設定

@Override public Cocos2dxGLSurfaceView onCreateView() { // ClippingNodeのバグ対応 glSurfaceView = new Cocos2dxGLSurfaceView(this); this.hideSystemUI(); glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8); return glSurfaceView; }

RenderTexture::create(paddedSize.width, paddedSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8_OES);

Page 55: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

開発環境ゲーム概要会社概要

物理ゲームの 開発

その他 苦労したこと

まとめ

Page 56: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

まとめ物理ゲームは楽しいけどパフォーマンス的に

制約が求められることになるため グローバルで作るのはなかなか難しい

->剛体をいかにして減らすかなどの最適化が 必要となる。

Page 57: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

まとめクロスプラットフォームゲームエンジン

とはいえ Android(iOS)にしか起こらない問題は

付きまとう

->OS固有のみならず、端末固有の問題など それもまた最適化が必要となるため

完全にすべての端末に対応することは難しい。

Page 58: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

まとめそれでもやっぱり便利ではあるので

Cocos2d-xはオススメです。

->中のコードも見える

->必要に応じてカスタマイズもできる

Page 59: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

アジェンダ

開発環境ゲーム概要会社概要

物理ゲームの 開発

その他 苦労したこと

まとめ

Page 60: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

世界に響くサービスを作りたい エンジニア/デザイナー募集中!

https://www.wantedly.com/projects/21002

Page 61: Braindots-開発秘話- Cocos2d-x3.5 開発事例 -

ご清聴ありがとうございました