SlideShare a Scribd company logo
Cocos2d-x(JS) ハンズオン #8
様々な画像描画方法
株式会社TKS2 清水友晶
清水 友晶
 株式会社TKS2
アプリ開発コンサル
Cocos2d-xサポート
スマホアプリ開発
TECH.C.非常勤講師
 プライベートでも
Cocos2d-xに関するゲーム開発
講演活動
執筆活動
 マイブーム: ゲームエンジン調査
 チラ裏開発メモ: http://tks2.net/memo
 SlideShare: http://www.slideshare.net/doraemonsss
 Facebook: http://www.facebook.com/doraemonsss
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
http://line.me/S/sticker/1085672
画像表示
 画像描画クラス
 テクスチャアトラス
 Scale9Spriteクラス
 Sprite Porygonクラス
 非同期読み込み
画像のダウンロード
 今回使用する画像をダウンロードしてください
http://tks2.net/techc/images2.zip
resource.js
var res = {
HelloWorld_png : "res/HelloWorld.png",
Apple_png : "res/apple.png",
Bug_png : "res/bug.png",
Frame_png : "res/frame.png",
Apple_And_Bug_plist : "res/AppleAndBug.plist"
};
画像描画クラス
デバッグ情報
デバッグ情報
 GL verts … 頂点数
 GL calls … ドローコール
 FPS / フレーム時間
画像描画
this._super();
//画面サイズ取得
var size = cc.winSize;
//リンゴの表示
var apple = new cc.Sprite(res.Apple_png);
apple.setPosition(size.width / 3, size.height / 2);
this.addChild(apple);
//虫の表示
var bug = new cc.Sprite(res.Bug_png);
bug.setPosition(size.width * 2 / 3, size.height / 2);
this.addChild(bug);
return true;
Sprite描画
画像描画
 GL verts: 12
 GL calls: 2
 画像を表示することで、頂点
数・コール数が増える
画像描画
同一画像による複数スプライト
this._super();
//画面サイズ取得
var size = cc.winSize;
//50個のリンゴを表示
for (var i = 0; i < 50; i++) {
var x = cc.random0To1() * 960;
var y = cc.random0To1() * 640;
var apple = new cc.Sprite(res.Apple_png);
apple.setPosition(x, y);
this.addChild(apple);
}
return true;
複数スプライト描画
複数スプライト描画
 GL calls: 1
 異なる画像を表示するとコール数が増えるが、
同一画像の場合は、コール数は増えない
 Cocos2d-x v3.xよりバッチノードが自動で適
用されるようになったため
ディズニーツムツム
https://www.youtube.com/watch?v=e9ei52IOs9Y
テクスチャアトラス
テクスチャに使用する画像
 画像を画面に表示するとき、画像はビデオメモリ上
(VRAM)に展開される
 GPUメモリ上に展開される画像のサイズ
 2のべき乗
1, 2, 4, 8, 16, 32, 64, 128,
256, 512, 1024, 2048, 4096, …
 例:
画像 960px * 640px
 VRAM上 1024px * 1024px
テクスチャアトラス
 複数の画像を1つにまとめたもの
 メモリの節約
 CPUの処理が高速
 Cocos2d-xの場合、設定ファイル(plist)とセット
テクスチャアトラスの注意
 同じグループの画像を1つにまとめる
 1つの画面で使用するパーツ画像
 アニメーションで使用する複数画像
 無関係な画像を1つにまとめない
 場合によっては、1枚の小さな画像を読み込むだけなのに、
大きなテクスチャアトラスを読み込む必要がある
 カードゲームなどの場合、カードをテクスチャアトラス
にまとめない
 最大サイズは2048px * 2048pxが適切
 古い端末の場合、4096pxを読み込めない
テクスチャアトラス生成
テクスチャアトラス生成
テクスチャアトラスによる描画
this._super();
//画面サイズ取得
var size = cc.winSize;
//テクスチャアトラスの読み込み
cc.spriteFrameCache.addSpriteFrames(res.AppleAndBug_plist);
//リンゴの表示
var apple = new cc.Sprite();
apple.initWithSpriteFrameName("apple.png");
apple.setPosition(size.width / 3, size.height / 2);
this.addChild(apple);
//虫の表示
var bug = new cc.Sprite();
bug.initWithSpriteFrameName("bug.png");
bug.setPosition(size.width * 2 / 3, size.height / 2);
this.addChild(bug);
return true;
テクスチャアトラスによる描画
画像描画
 GL verts: 12  12
 GL calls: 2  1
 テクスチャアトラスの利用により、
コール数が減っている
SpriteFrameCacheクラス
 テクスチャアトラスを管理する
 テクスチャアトラスの読み込み
 addSpriteFramesWithFile関数
 テクスチャアトラスの解放
 removeSpriteFrames関数
 removeSpriteFrameWithFile関数
 注意
 Spriteクラスによるテクスチャの変
更には注意すること
Texture Packer
Scale9Spriteクラス
画像拡大
this._super();
//画面サイズ取得
var size = cc.winSize;
//フレームの表示
var frame = new cc.Sprite(res.Frame_png);
frame.setPosition(size.width / 2, size.height / 2);
frame.setScale(40, 10);
this.addChild(frame);
return true;
画像拡大
Scale9Spriteクラス
Scale9Spriteクラスによる
画像拡大
this._super();
//画面サイズ取得
var size = cc.winSize;
//フレームの表示
var frame = new cc.Scale9Sprite(res.Frame_png);
frame.setPosition(size.width / 2, size.height / 2);
frame.setContentSize(size.width / 2, size.height / 2);
this.addChild(frame);
return true;
Scale9Spriteクラスによる
画像拡大
Sprite Polygon
Sprite Polygon
 画像をポリゴン化し、描画コストを少なくする
Sprite Polygonクラス
this._super();
//画面サイズ取得
var size = cc.winSize;
//リンゴの表示
var pinfo1 = jsb.AutoPolygon.generatePolygon(res.Apple_png);
var apple = new cc.Sprite(pinfo1);
apple.setPosition(size.width / 3, size.height / 2);
this.addChild(apple);
//虫の表示
var pinfo2 = jsb.AutoPolygon.generatePolygon(res.Bug_png);
var bug = new cc.Sprite(pinfo2);
bug.setPosition(size.width * 2 / 3, size.height / 2);
this.addChild(bug);
return true;
Sprite描画
Sprite描画
Texture Packer
Texture Packer
非同期読み込み
大型プロジェクトの場合
 テクスチャアトラスを用い、テクスチャロード時間の
短縮を行っても、テクスチャアトラスの枚数が多けれ
ば、ユーザビリティは悪いまま
 しかし画像を読み込み終えなければ、その画像を表示
することはできない
 テクスチャアトラスを使ってもなおユーザビリティが
改善されない場合、画像の非同期読み込みの導入が要
求される
 ただし非同期読み込みを行う場合、設計の変更が発生
する可能性があるため、事前に非同期読み込みの仕組
みを理解し、設計に影響を与えないような作りとする
ドラゴンスラッシュ
https://www.youtube.com/watch?v=mIT7qqYp68s
非同期読み込みによる描画
this._super();
//画像の読み込み
cc.textureCache.addImageAsync("res/apple.png",
this.loadingCallback, this);
cc.textureCache.addImageAsync("res/bug.png",
this.loadingCallback, this);
return true;
非同期読み込みによる描画
loadingCallback:function (texture) {
//画面サイズ取得
var size = cc.winSize;
//画像の表示
var x = cc.random0To1() * 960;
var y = cc.random0To1() * 640;
var sprite = new cc.Sprite(texture);
sprite.setPosition(x, y);
this.addChild(sprite);
}
Sprite描画
作業はここまで
参考になるサイト
 Cocos公式Wiki
http://www.cocos2d-
x.org/wiki/Cocos2d-JS
 Cocos2d-JS APIリファレンス
http://cocos2d-x.org/wiki/Reference
 Qiita
(tag: cocos2d-js)
https://qiita.com
おわり
 ありがとうございました

More Related Content

PPTX
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
PPTX
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
PPTX
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
PPTX
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
PPTX
Cocos2d-x(JS)の紹介
PPTX
Cocos2d-x(JS) ハンズオン #05「Cocos StudioとCocos2d-x (JS)との連携」
PPTX
Cocos2d-x(JS) ハンズオン #09「ラベル・テキストボックス」
PPTX
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
Cocos2d-x(JS)の紹介
Cocos2d-x(JS) ハンズオン #05「Cocos StudioとCocos2d-x (JS)との連携」
Cocos2d-x(JS) ハンズオン #09「ラベル・テキストボックス」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」

What's hot (20)

PPTX
Cocos2d-x(JS) ハンズオン #10「3D機能とVR機能」
PPTX
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
PDF
cocos2d-xとCocosBuilderでゲームを作ってみよう
PDF
Cocos2d xで簡単なゲームを作ってみよう!
PPTX
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
PDF
Cocos2d-x 3D Extension
PDF
Cocos Code IDEを使ってみた
PDF
Cocos2d-x 3.2 Eclipseを利用したAndroid開発環境の構築
PPTX
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
PDF
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
PDF
cocos2d-x公開講座 in 鹿児島
PPTX
Cocos2d-x(JS) ハンズオン #13「SNS対応(Twitter, Facebook)」
PDF
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
PDF
cocos2d-xとネイティブ間の連携
PPTX
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
PDF
Cocos2d-x実践講座 in 鹿児島
PDF
cocos2d-xを利用したパズドラ風ゲームの作成
PDF
cocos2d-xハンズオン勉強会 in 名古屋
PDF
cocos2d-xとCocos Code IDE
PDF
CocosBuilderとcocos2d-x JSB
Cocos2d-x(JS) ハンズオン #10「3D機能とVR機能」
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
cocos2d-xとCocosBuilderでゲームを作ってみよう
Cocos2d xで簡単なゲームを作ってみよう!
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x 3D Extension
Cocos Code IDEを使ってみた
Cocos2d-x 3.2 Eclipseを利用したAndroid開発環境の構築
Cocos2d-xにおけるモバイル開発〜将来を見据えた開発〜
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
cocos2d-x公開講座 in 鹿児島
Cocos2d-x(JS) ハンズオン #13「SNS対応(Twitter, Facebook)」
Cocos2d-x v3.2を利用してシューティングゲームを作ろう!
cocos2d-xとネイティブ間の連携
Cocos2d-x(JS) ハンズオン #01 「はじめてのCocos2d-x (JS)」
Cocos2d-x実践講座 in 鹿児島
cocos2d-xを利用したパズドラ風ゲームの作成
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xとCocos Code IDE
CocosBuilderとcocos2d-x JSB
Ad

Viewers also liked (11)

KEY
cocos2d + 非同期
PDF
Amazon ec2とは何か?
KEY
Herokuで作るdevise認証サイト
PDF
120529 railsとか勉強会v2
PDF
Unityのasset bundle運用実例@lordofknights
PPTX
Shadow gunのサンプルから学べるモバイル最適化
PDF
Cocos2d-xで画像周りを自由自在に表示してみよう
PDF
Extending the Unity Editor Extended
PPTX
ゲーム開発とデザインパターン
PDF
DeNA流cocos2d xとの付き合い方
PPTX
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
cocos2d + 非同期
Amazon ec2とは何か?
Herokuで作るdevise認証サイト
120529 railsとか勉強会v2
Unityのasset bundle運用実例@lordofknights
Shadow gunのサンプルから学べるモバイル最適化
Cocos2d-xで画像周りを自由自在に表示してみよう
Extending the Unity Editor Extended
ゲーム開発とデザインパターン
DeNA流cocos2d xとの付き合い方
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Ad

Similar to Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」 (20)

PDF
かんたんなcocos2d-xの紹介
KEY
Cocos2dx tips
PDF
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
PDF
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
PDF
Flashup 12 Basic Training of Away3D
PDF
Creators'night#14今井
PDF
Cocos2dを使ったi phoneゲーム開発手法
PDF
Flashup13 Basic Training of Flare3D
PDF
Cocos2d-x公開講座 in 鹿児島
PDF
㉒初期プロジェクトを改造!
PDF
簡単!OpenGL ES 2.0フラグメントシェーダー
PDF
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
KEY
Cocos2d platforms
KEY
Core Graphicsでつくる自作UIコンポーネント入門
PDF
Unity 名古屋セミナー [Sprite Studio]
KEY
Arctic.js
PDF
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 4
PDF
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
PDF
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
KEY
Cocos2d xのススメ
かんたんなcocos2d-xの紹介
Cocos2dx tips
GTMF2012 SpriteStudio と "Unity" と "CoronaSDK" と "ngCore" ! ~組み合わせて改善する 2D ワーク...
「釣り★スタ」でのCocos2d-JSを使ってのアプリアップデート事例 (1)
Flashup 12 Basic Training of Away3D
Creators'night#14今井
Cocos2dを使ったi phoneゲーム開発手法
Flashup13 Basic Training of Flare3D
Cocos2d-x公開講座 in 鹿児島
㉒初期プロジェクトを改造!
簡単!OpenGL ES 2.0フラグメントシェーダー
改めて注目される2D アニメーションツール SpriteStudio ~国産2Dツールが(舶来ゲームエンジンの力を借りながら)世界へ~
Cocos2d platforms
Core Graphicsでつくる自作UIコンポーネント入門
Unity 名古屋セミナー [Sprite Studio]
Arctic.js
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 4
Macでcocos2d-x 2.1.2を使用した、Androidアプリの開発環境構築について
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
Cocos2d xのススメ

More from Tomoaki Shimizu (10)

PDF
cocos2d-x 3.0による変更点
PDF
タワーオブスペルズ x cocos2d-x
PDF
cocos2d-xで利用できる暗号化
PDF
CocoStudioとcocos2d-xの連携2
PDF
cocos2d-xにおけるマップエディタの利用
PDF
cocos2d-x 3.0 新しい物理演算クラスの利用
PDF
Macでcocos2d-x 3.0betaを使用した、クロスプラットフォーム開発環境構築について
PDF
Macでcocos2d-x 3.0alpha0を使用した、クロスプラットフォーム開発環境構築について
PDF
cocos2d-xにおけるデータ管理
PDF
cocos2d-xの概要とこれまでの進化・これからの展開
cocos2d-x 3.0による変更点
タワーオブスペルズ x cocos2d-x
cocos2d-xで利用できる暗号化
CocoStudioとcocos2d-xの連携2
cocos2d-xにおけるマップエディタの利用
cocos2d-x 3.0 新しい物理演算クラスの利用
Macでcocos2d-x 3.0betaを使用した、クロスプラットフォーム開発環境構築について
Macでcocos2d-x 3.0alpha0を使用した、クロスプラットフォーム開発環境構築について
cocos2d-xにおけるデータ管理
cocos2d-xの概要とこれまでの進化・これからの展開

Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」