SlideShare uma empresa Scribd logo
1 de 33
HTML5で作る
スマホブラウザゲーム
株式会社フォリフ
エンジニア
大橋 巧
2012/05/16 第3回SmartHacks
自己紹介

•   大橋 巧

•   2011年4月入社

•   スマートフォン向けコンテンツのクライアン
    トサイド担当

•   Corollin’ Planet

•   最近はFlashコンテンツのHTML5変換や、
    Backbone.jsでWebアプリの開発とか
今日のお話

• 開発事例紹介
• スマホブラウザゲームの
 アニメーション

• 開発ではまった事とその解決法
開発事例紹介
5-Land

•   iOS/Androidのブラウザ
    上で動くミニゲーム集


•   一部を除いてHTML5で
    はない


•   ガラケーレベル
Corollin’ Planet

• 2011年7月リリース
• HTML5で開発
• 開発2週間くらい
•   corollin.com
Corollin’ Planet
•   今年3月、Mobile Hack Tokyoの
    HackathonにてFacebookアプリ
    としてリリース
    ○ 得点、進行状況のシェア
    ○ 友人のプレイ記録をゲーム
    内で見られる


•   あのザッカーバーグもプレイ
    感想:”Too Hard.”


•   Best Social Mobile Game受賞!
Final Rebellion

•   MMOストラテジー


•   マップのスクロール、
    ガチャ演出などに
    HTML5を使用


•   joynt.in/finalrebellion
スマホブラウザゲーム
(の、アニメーション)
大きく2通り


• Canavasによるアニメーション
• CSS3によるアニメーション
Canvasとは

•   JavaScriptを使って動的に図を描くHTMLの要素

HTML:
    <canvas width= 100 height= 100 ></canvas>
js:
    var canvas = document.getElementsByTagName('canvas')[0];
    var ctx = canvas.getContext('2d');
    ctx.Rect(0, 0, 50, 100);
    ctx.fill();
Canvasアニメーション

•   ループの中で、描画→クリア→描画
setInterval(function() {
   // Canvasをリフレッシュ
   ctx.clearRect(0, 0, canvas.width, canvas.height);
   // 座標を移動させながら描画
   ctx.drawImage(img, x++, y);
}, 100);
CSS3アニメーション

•    Animation
     ○ キーフレームをCSSに記述
    CSS:
      #hoge {
        -webkit-animation: animation_1 1s infinite;
      }
      @-webkit-keyframes animation_1 {
        0% { left: 0px; }
        50% { left: 200px; }
        100% { left: 100px; top: 100px; }
      }
CSS3アニメーション
•    Transition
     ○ 時間的変化
     ○ スタイルを変更すると自動的にアニメー
     ションを伴って変化する
    CSS:
        -webkit-transition: ease-out 2s;
    js:
        document.getElementById( hoge ).style.left = 100px ;
        document.getElementById( hoge ).style.top = 100px ;
番外

•    HTML5使わない場合
    js:
          setInterval(function() {
             x++;
             document.getElementById( hoge ).style.left = x + px ;
          }, 100);



•    CanvasもCSS3も使えないブラウザでは必要
     (IE8以下など)
CanvasかCSS3か

•   Canvasアニメーション
    ○ 複雑な動き(物理判定など)も作れる
    ○ CSS3と比べるとパフォーマンスは落ちる

•   CSS3アニメーション
    ○ 実装が簡単(CSSのみで完結)
    ○ シンプルなアニメーション
Corollin’ Planetでは

•   両方組み合わせ


•   メインのゲーム部分は
    Canvas

•   メニュー画面や、
    ストーリー部分はCSS3
開発中にはまった事
開発中にはまった事


• アニメーションが重い
• Canvasのバグ(主にAndorid)
• CSS3のバグ(主にAndorid)
対策:アニメーションが重い


•   Canvas
    ○ Retinaディスプレイ対応
    ○ 描画範囲を最小限に
    ○ putImageDataを使用

•   CSS3
    ○ GPUアクセラレーションを利用
Retinaディスプレイ対応

•   2倍サイズの画像を2倍サイズのCanvasに描画
    ○ 非Retina
<canvas width= 100 height= 100 >
ctx.drawImage(img, 0, 0, 100, 100);


    ○ Retina
<canvas width= 200 height= 200 style= width: 100px; height: 100px; >
ctx.drawImage(img, 0, 0, 200, 200);


•   アニメーションのパフォーマンスにも影響
描画範囲を最小限に!


•   Canvasアニメーションでは毎フレームCanvasを
    クリアする必要があるため必然的に描画範囲
    が大きくなり、重くなる
    →必要な部分だけ再描画する
putImageData

•   getImageDataで読み込んだものを貼付ける

•   drawImageDataより描画コスト軽い
    var image = ctx.getImageData(0, 0, 100, 100);
    ctx.putImageData(image, 0, 0);

•   Corollinではあらかじめアニメーションパター
    ンを読み込み、putImageで連続的に再生
    (内部でセル画を生成しているイメージ)
GPUアクセラレーション

•   iOSではtransformプロパティ等に対してアクセ
    ラレーションが有効
    →iOS5からはCanvasに対しても有効

•   iOSシミュレータの場合
    デバッグ→ブレンドレイヤーで確認
その他

•   Canvasを複数枚重ねてレイヤー的に

•   描画は2フレームに1度

•   キャラクターの画像はAi→Canvasという
    IllustlatorのプラグインでCanvasデータに変更
Canvasのバグ


•   主にAndroid 2.1x
    ○ drawImageのサイズ、座標が引き延ばされる
    ○ scaleが2回適用される
    ○ rotate, translateがなんかカオス
Canvasのバグ

•    drawImageのバグ
     →scaleで対応
    var zoom_fix = Math.sqrt(320 / screen.width);
    ctx.scale(zoom_fix, zoom_fix);
    ctx.drawImage(hoge, 0, 0);



•    transform, rotate
     →使わない
CSS3のバグ

•   Android2.2以降でTransformを設定した要素の子
    要素にTransformを設定
    →アニメーション時、一瞬Transformが適用さ
    れない事がある

•   対策:やめましょう
まとめ
Androidのチェックを万全に


•   先述した以外にも端末やメーカー別のバグが
    あるため、詳細なチェックは必須

•   iOSで動いているものをAndroidでも動かそう
    とすると難しいが、逆は簡単
    →Androidベースで開発していくのもアリ
安定した機能を使う


•   実際に他社で使用されているなど、実績のあ
    るものを使用

•   Web SQLのようにHTML5の仕様から外れてし
    まうものも
ライブラリの使用

•   ここ一年でかなり充実

•   バグや実装の違いを吸収してくれるものも

•   ライブラリ
    →enchant.js, Arctic.js,easel.js, etc...

•   オーサリングツール
    →Adobe Edge, Sencha Animater, etc...
ご清聴
ありがとうございました

Mais conteúdo relacionado

Mais procurados

ShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみKohei Kadowaki
 
HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -Toshio Ehara
 
Azure上でec cubeを運用するポイント
Azure上でec cubeを運用するポイントAzure上でec cubeを運用するポイント
Azure上でec cubeを運用するポイントMakoto Nishimura
 
WebGL入門ハンズオン資料
WebGL入門ハンズオン資料WebGL入門ハンズオン資料
WebGL入門ハンズオン資料Kazuya Hiruma
 
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSSShogo Iwano
 
UITableViewで無限CoverFlowを作る
UITableViewで無限CoverFlowを作るUITableViewで無限CoverFlowを作る
UITableViewで無限CoverFlowを作るHidetoshi Mori
 
Firefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたFirefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたKohei Kadowaki
 
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境lig-dsktschy
 
Virtual boxからVM Importする
Virtual boxからVM ImportするVirtual boxからVM Importする
Virtual boxからVM ImportするShinji Saito
 
HTML5 Conference 2015 WebGLハンズオン資料
HTML5 Conference 2015 WebGLハンズオン資料HTML5 Conference 2015 WebGLハンズオン資料
HTML5 Conference 2015 WebGLハンズオン資料Kazuya Hiruma
 
使う前に知っておきたいSVGのこと
使う前に知っておきたいSVGのこと使う前に知っておきたいSVGのこと
使う前に知っておきたいSVGのことKasumi Morita
 
Xamarinは辛いよ
Xamarinは辛いよXamarinは辛いよ
Xamarinは辛いよTakkiiii
 
UICollectionViewLayoutでカバーフローを作りたい!
UICollectionViewLayoutでカバーフローを作りたい!UICollectionViewLayoutでカバーフローを作りたい!
UICollectionViewLayoutでカバーフローを作りたい!sawat1203
 
12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッション12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッションKei Nakazawa
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会VOYAGE GROUP
 
軽量ASP.NETフレームワークNancy
軽量ASP.NETフレームワークNancy軽量ASP.NETフレームワークNancy
軽量ASP.NETフレームワークNancyNarami Kiyokura
 

Mais procurados (19)

ShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみShareWisをFirefoxで動かすためのSVG的とりくみ
ShareWisをFirefoxで動かすためのSVG的とりくみ
 
Canvas勉強会
Canvas勉強会Canvas勉強会
Canvas勉強会
 
HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -HTML5のCanvas入門 - Img画像を編集してみよう -
HTML5のCanvas入門 - Img画像を編集してみよう -
 
Azure上でec cubeを運用するポイント
Azure上でec cubeを運用するポイントAzure上でec cubeを運用するポイント
Azure上でec cubeを運用するポイント
 
WebGL入門ハンズオン資料
WebGL入門ハンズオン資料WebGL入門ハンズオン資料
WebGL入門ハンズオン資料
 
BuriKaigi2018
BuriKaigi2018BuriKaigi2018
BuriKaigi2018
 
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
 
UITableViewで無限CoverFlowを作る
UITableViewで無限CoverFlowを作るUITableViewで無限CoverFlowを作る
UITableViewで無限CoverFlowを作る
 
Firefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみたFirefox OSでSVGをつかってみた
Firefox OSでSVGをつかってみた
 
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
Nuxt.jsで手軽に構築するモダン・フロントエンド開発環境
 
Aiming study#6pdf
Aiming study#6pdfAiming study#6pdf
Aiming study#6pdf
 
Virtual boxからVM Importする
Virtual boxからVM ImportするVirtual boxからVM Importする
Virtual boxからVM Importする
 
HTML5 Conference 2015 WebGLハンズオン資料
HTML5 Conference 2015 WebGLハンズオン資料HTML5 Conference 2015 WebGLハンズオン資料
HTML5 Conference 2015 WebGLハンズオン資料
 
使う前に知っておきたいSVGのこと
使う前に知っておきたいSVGのこと使う前に知っておきたいSVGのこと
使う前に知っておきたいSVGのこと
 
Xamarinは辛いよ
Xamarinは辛いよXamarinは辛いよ
Xamarinは辛いよ
 
UICollectionViewLayoutでカバーフローを作りたい!
UICollectionViewLayoutでカバーフローを作りたい!UICollectionViewLayoutでカバーフローを作りたい!
UICollectionViewLayoutでカバーフローを作りたい!
 
12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッション12.09.08 明星和楽2012 KLabハンズオンセッション
12.09.08 明星和楽2012 KLabハンズオンセッション
 
Flux react現状確認会
Flux react現状確認会Flux react現状確認会
Flux react現状確認会
 
軽量ASP.NETフレームワークNancy
軽量ASP.NETフレームワークNancy軽量ASP.NETフレームワークNancy
軽量ASP.NETフレームワークNancy
 

Semelhante a HTML5で作るスマホブラウザゲーム

Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見たOCHI Shuji
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたShumpei Shiraishi
 
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2Takuya Mukohira
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001Teruaki Tsubokura
 
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」Yasunobu Ikeda
 
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event  2014/09/22 (Japanese)Ember.js Tokyo event  2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)Yuki Shimada
 
JavaScriptで『漫画カメラ』的画像加工
JavaScriptで『漫画カメラ』的画像加工JavaScriptで『漫画カメラ』的画像加工
JavaScriptで『漫画カメラ』的画像加工Masayuki Maekawa
 
iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!cocopon
 
第8回rest勉強会 bootstrap編
第8回rest勉強会 bootstrap編第8回rest勉強会 bootstrap編
第8回rest勉強会 bootstrap編ksimoji
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashYasunobu Ikeda
 
SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7Naoki Matsuda
 
LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側Takuro Hanawa
 
try! Swift - Advanced Graphics with Core Animation
try! Swift - Advanced Graphics with Core Animationtry! Swift - Advanced Graphics with Core Animation
try! Swift - Advanced Graphics with Core AnimationTim Oliver
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
ae-10. 中間まとめ(ディープラーニング)
ae-10. 中間まとめ(ディープラーニング)ae-10. 中間まとめ(ディープラーニング)
ae-10. 中間まとめ(ディープラーニング)kunihikokaneko1
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!Nishida Kansuke
 
NHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーションNHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーションnhn_hangame
 

Semelhante a HTML5で作るスマホブラウザゲーム (20)

Core Animation 使って見た
Core Animation 使って見たCore Animation 使って見た
Core Animation 使って見た
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
 
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
苫小牧高専 ソフトウェアテクノロジー部 enchant.jsでゲーム作り 2
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
 
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
F-site発表資料「Flashユーザーが今覚えておきたいHTML5」
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 
Ember.js Tokyo event 2014/09/22 (Japanese)
Ember.js Tokyo event  2014/09/22 (Japanese)Ember.js Tokyo event  2014/09/22 (Japanese)
Ember.js Tokyo event 2014/09/22 (Japanese)
 
JavaScriptで『漫画カメラ』的画像加工
JavaScriptで『漫画カメラ』的画像加工JavaScriptで『漫画カメラ』的画像加工
JavaScriptで『漫画カメラ』的画像加工
 
iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!
 
第8回rest勉強会 bootstrap編
第8回rest勉強会 bootstrap編第8回rest勉強会 bootstrap編
第8回rest勉強会 bootstrap編
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
インタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlashインタラクティブコンテンツにおけるHTML5とFlash
インタラクティブコンテンツにおけるHTML5とFlash
 
SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7SVG MANIAX - CSS Nite After dark7
SVG MANIAX - CSS Nite After dark7
 
Media Kinect2014 day7
Media Kinect2014 day7Media Kinect2014 day7
Media Kinect2014 day7
 
LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側LIFULL HOME'S「かざして検索」リリースの裏側
LIFULL HOME'S「かざして検索」リリースの裏側
 
try! Swift - Advanced Graphics with Core Animation
try! Swift - Advanced Graphics with Core Animationtry! Swift - Advanced Graphics with Core Animation
try! Swift - Advanced Graphics with Core Animation
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
ae-10. 中間まとめ(ディープラーニング)
ae-10. 中間まとめ(ディープラーニング)ae-10. 中間まとめ(ディープラーニング)
ae-10. 中間まとめ(ディープラーニング)
 
㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!㉒初期プロジェクトを改造!
㉒初期プロジェクトを改造!
 
NHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーションNHN HTML5勉強会 CSS3アニメーション
NHN HTML5勉強会 CSS3アニメーション
 

HTML5で作るスマホブラウザゲーム

  • 2. 自己紹介 • 大橋 巧 • 2011年4月入社 • スマートフォン向けコンテンツのクライアン トサイド担当 • Corollin’ Planet • 最近はFlashコンテンツのHTML5変換や、 Backbone.jsでWebアプリの開発とか
  • 3. 今日のお話 • 開発事例紹介 • スマホブラウザゲームの アニメーション • 開発ではまった事とその解決法
  • 5. 5-Land • iOS/Androidのブラウザ 上で動くミニゲーム集 • 一部を除いてHTML5で はない • ガラケーレベル
  • 6. Corollin’ Planet • 2011年7月リリース • HTML5で開発 • 開発2週間くらい • corollin.com
  • 7. Corollin’ Planet • 今年3月、Mobile Hack Tokyoの HackathonにてFacebookアプリ としてリリース ○ 得点、進行状況のシェア ○ 友人のプレイ記録をゲーム 内で見られる • あのザッカーバーグもプレイ 感想:”Too Hard.” • Best Social Mobile Game受賞!
  • 8. Final Rebellion • MMOストラテジー • マップのスクロール、 ガチャ演出などに HTML5を使用 • joynt.in/finalrebellion
  • 11. Canvasとは • JavaScriptを使って動的に図を描くHTMLの要素 HTML: <canvas width= 100 height= 100 ></canvas> js: var canvas = document.getElementsByTagName('canvas')[0]; var ctx = canvas.getContext('2d'); ctx.Rect(0, 0, 50, 100); ctx.fill();
  • 12. Canvasアニメーション • ループの中で、描画→クリア→描画 setInterval(function() { // Canvasをリフレッシュ ctx.clearRect(0, 0, canvas.width, canvas.height); // 座標を移動させながら描画 ctx.drawImage(img, x++, y); }, 100);
  • 13. CSS3アニメーション • Animation ○ キーフレームをCSSに記述 CSS: #hoge { -webkit-animation: animation_1 1s infinite; } @-webkit-keyframes animation_1 { 0% { left: 0px; } 50% { left: 200px; } 100% { left: 100px; top: 100px; } }
  • 14. CSS3アニメーション • Transition ○ 時間的変化 ○ スタイルを変更すると自動的にアニメー ションを伴って変化する CSS: -webkit-transition: ease-out 2s; js: document.getElementById( hoge ).style.left = 100px ; document.getElementById( hoge ).style.top = 100px ;
  • 15. 番外 • HTML5使わない場合 js: setInterval(function() { x++; document.getElementById( hoge ).style.left = x + px ; }, 100); • CanvasもCSS3も使えないブラウザでは必要 (IE8以下など)
  • 16. CanvasかCSS3か • Canvasアニメーション ○ 複雑な動き(物理判定など)も作れる ○ CSS3と比べるとパフォーマンスは落ちる • CSS3アニメーション ○ 実装が簡単(CSSのみで完結) ○ シンプルなアニメーション
  • 17. Corollin’ Planetでは • 両方組み合わせ • メインのゲーム部分は Canvas • メニュー画面や、 ストーリー部分はCSS3
  • 20. 対策:アニメーションが重い • Canvas ○ Retinaディスプレイ対応 ○ 描画範囲を最小限に ○ putImageDataを使用 • CSS3 ○ GPUアクセラレーションを利用
  • 21. Retinaディスプレイ対応 • 2倍サイズの画像を2倍サイズのCanvasに描画 ○ 非Retina <canvas width= 100 height= 100 > ctx.drawImage(img, 0, 0, 100, 100); ○ Retina <canvas width= 200 height= 200 style= width: 100px; height: 100px; > ctx.drawImage(img, 0, 0, 200, 200); • アニメーションのパフォーマンスにも影響
  • 22. 描画範囲を最小限に! • Canvasアニメーションでは毎フレームCanvasを クリアする必要があるため必然的に描画範囲 が大きくなり、重くなる →必要な部分だけ再描画する
  • 23. putImageData • getImageDataで読み込んだものを貼付ける • drawImageDataより描画コスト軽い var image = ctx.getImageData(0, 0, 100, 100); ctx.putImageData(image, 0, 0); • Corollinではあらかじめアニメーションパター ンを読み込み、putImageで連続的に再生 (内部でセル画を生成しているイメージ)
  • 24. GPUアクセラレーション • iOSではtransformプロパティ等に対してアクセ ラレーションが有効 →iOS5からはCanvasに対しても有効 • iOSシミュレータの場合 デバッグ→ブレンドレイヤーで確認
  • 25. その他 • Canvasを複数枚重ねてレイヤー的に • 描画は2フレームに1度 • キャラクターの画像はAi→Canvasという IllustlatorのプラグインでCanvasデータに変更
  • 26. Canvasのバグ • 主にAndroid 2.1x ○ drawImageのサイズ、座標が引き延ばされる ○ scaleが2回適用される ○ rotate, translateがなんかカオス
  • 27. Canvasのバグ • drawImageのバグ →scaleで対応 var zoom_fix = Math.sqrt(320 / screen.width); ctx.scale(zoom_fix, zoom_fix); ctx.drawImage(hoge, 0, 0); • transform, rotate →使わない
  • 28. CSS3のバグ • Android2.2以降でTransformを設定した要素の子 要素にTransformを設定 →アニメーション時、一瞬Transformが適用さ れない事がある • 対策:やめましょう
  • 30. Androidのチェックを万全に • 先述した以外にも端末やメーカー別のバグが あるため、詳細なチェックは必須 • iOSで動いているものをAndroidでも動かそう とすると難しいが、逆は簡単 →Androidベースで開発していくのもアリ
  • 31. 安定した機能を使う • 実際に他社で使用されているなど、実績のあ るものを使用 • Web SQLのようにHTML5の仕様から外れてし まうものも
  • 32. ライブラリの使用 • ここ一年でかなり充実 • バグや実装の違いを吸収してくれるものも • ライブラリ →enchant.js, Arctic.js,easel.js, etc... • オーサリングツール →Adobe Edge, Sencha Animater, etc...

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n