SlideShare ist ein Scribd-Unternehmen logo
1 von 31
iOSプログラマへ。
HTML5 Canvas がおもしろい!
DOTAPON Software
@cocopon




http://dotapon.sakura.ne.jp
こんにちは!
                  @cocopon
                  趣味でアプリ開発・デザインやってます




日記ソフト Osciroi        関数電卓 Calqum              Tiny iOS




                http://dotapon.sakura.ne.jp
本題
Canvas要素とは

            “     The canvas element provides scripts with a
                  resolution-dependent bitmap canvas, which can be



                                                                     ”
                  used for rendering graphs, game graphics, or
                  other visual images on the fly.




                     グラフやゲームに使える
                     ビットマップキャンバス



http://www.w3.org/TR/html5/the-canvas-element.html#the-canvas-element
例えば、こんなものが作れます
                                  Tiny iOS




http://www.dotapon.sakura.ne.jp/apps/tiny_ios/
何がいいの? (1)
“それなりに” マルチプラットフォーム




互換性に気をつけてがんばれば、

•   iOSでも動く
•   PCのモダンブラウザでも動く
•   新しめのAndroidでも動く
何がいいの? (2)
Core Graphics にそっくり、
iOSアプリ開発の経験が活かせる!
何がいいの? (2)
Core Graphics にそっくり、
iOSアプリ開発の経験が活かせる!


   i O S プ ロ グ ラ マ 大 歓 喜 !
なぜ そっくり なのか



                                              from Wikipedia




     AppleのDashboard Widgetsが起源だからさ!



http://en.wikipedia.org/wiki/Canvas_element
というわけで…



iOSアプリ開発経験を活かして、
Webでグリグリ動くものを作ろう!
今日の目標


• HTML5 Canvasに触れてもらう

• 「iOSと同じじゃん?」と感じてもらう

• 「俺もいけるじゃん!」と感じてもらう
つくってみよう
Canvas入門キット
 HTML5 Canvas 入門キット




  http://goo.gl/bf5q9

     後ほど使いますので、
    ダウンロードしておいてね!
描画のキホン
コンテキストを取得する
                描くときに必要なモノです




         Canvas                            iOS
                               CGContextRef context =
var context =
                               UIGraphicsGetCurrentContext(
canvasElem.getContext(‘2d’);
                               );
四角を描く
                      stroke/fillRect

                            (x, y)
                                        h

                                w
         Canvas                                  iOS

// 枠線のみ                              // 枠線のみ
context.strokeRect(x, y, w,          CGContextStrokeRect(context,
h);                                  rect);

// 塗りつぶし                             // 塗りつぶし
context.fillRect(x, y, w,            CGContextFillRect(context,
h);                                  rect);
ちょいと複雑な図形を描く
   いくつか準備が必要です


  はじめる   beginPath

         moveTo/lineTo/arc/
  線を足す
         bezierCurveTo...

  閉じる    closePath


   描く    stroke/fill
線を描く
                      moveTo/lineTo

                                   (x2, y2)
               (x1, y1)



         Canvas                           iOS

                              CGContextMoveToPoint(context
                              , x1, y1);
context.moveTo(x1, y1);
                              CGContextAddLineToPoint(cont
context.lineTo(x2, y2);
                              ext, x2, y2);
context.stroke();
                              CGContextStrokePath(context)
                              ;
円を描く
                                  arc


                              r
                                   (x, y)
         Canvas                                     iOS
context.arc(x, y, r, 0,
                                        CGContextAddArc(context, x,
Math.PI * 2,
                                        y, r, 0, M_PI * 2,
counterClockwise);
                                        clockWise);
context.fill();
                                        CGContextFillPath(context);
// counterClockwise = true:
                                        // clockWise = 1: 時計まわり,
反時計まわり,
                                        // 1以外: 反時計まわり
// false: 時計まわり
色を変える
                   strokeStyle, fillStyle



         Canvas                            iOS

// 線の色                         // 線の色
context.strokeStyle =          CGContextSetStrokeColorWithC
‘#000’;                        olor(context, color);

// 塗りつぶしの色                     // 塗りつぶしの色
context.fillStyle =            CGContextSetFillColorWithCol
‘rgba(255, 0, 0, 0.5)’;        or(context, color);
画像を描く
                        drawImage
                 (dx, dy)


                                            img, canvas, video要素の
                                       dh
                                            中身を描画できます

                               dw



         Canvas                                 iOS

context.drawImage(image, dx,        CGContextDrawImage(context,
dy, dw, dh);                        rect, image);
練習1. 図形を描いてみる

 CanvasStarterKit/practices/practice1
入力
マウス・タッチのイベント
 マウスイベント     タッチイベント

 mousedown   touchdown

 mousemove   touchmove

  mouseup     touchup



  この2つをうまく抽象化すれば、
 PCでもタッチな端末でも使える!
InputManager.prototype.attach = function() {
!    var me = this;
!    var supportsTouch = (window['Touch'] !== undefined);

!    if (supportsTouch) {



入力イベントの抽象化
!    !    me.listeners_ = [
!    !    !     {
!    !    !     !    type: 'touchstart',
!    !    !     !    element: me.canvas_,
!    !    !     !    handler: $.proxy(me.onBrowserTouchDown_, me)
!    !    !     }, {
!    !    !     !    type: 'touchmove',
!    !    !     !    element: me.canvas_,
!    !    !     !    handler: $.proxy(me.onBrowserTouchMove_, me)
!    !    !     }, {
!    !    !     !    type: 'touchend',
!    !    !     !    element: me.canvas_,
!    !    !     !    handler: $.proxy(me.onBrowserTouchUp_, me)
!    !    !     }
!    !    ];
!    }
!    else {
!    !    me.listeners_ = [
!    !    !     {
!    !    !     !    type: 'mousedown',
!    !    !     !    element: me.canvas_,
!
!
!
    詳細は、入門キットの
     !
     !
     !
          !
          !
          !
                !
                }, {
                !
                     handler: $.proxy(me.onBrowserMouseDown_, me)

                     type: 'mousemove',

inputmanager.jsをチェック!
!
!
!
     !
     !
     !
          !
          !
          !
                !
                !
                }, {
                     element: $(document),
                     handler: $.proxy(me.onBrowserMouseMove_, me)

!    !    !     !    type: 'mouseup',
!    !    !     !    element: $(document),
!    !    !     !    handler: $.proxy(me.onBrowserMouseUp_, me)
!    !    !     }
!    !    ];
!    }

!    $.each(me.listeners_, function(index, listener) {
!    !    listener.element.on(listener.type, listener.handler);
!    });
};


/**
 * Detach mouse/touch events from the related canvas element.
 */
InputManager.prototype.detach = function() {
練習2. お絵描きアプリを
     作ってみる

CanvasStarterKit/practices/practice2
さいごに
さらに上を目指すあなたへ

 context.toDataURL(...)
 画像データをURIの文字列 “data:mime/type;...” に変換する



 context.getImageData(...)
 RGBAのバイト列で表現した画像データを取得する



 context.putImageData(...)
 RGBAのバイト列で表現された画像を設定する
さんこう
Canvasリファレンス - HTML5.JP
http://www.html5.jp/canvas/ref.html
超オススメ。
Canvasの情報は、ほぼここで事足りる。




HTML Canvas 2D Context
http://dev.w3.org/html5/2dcontext/
本家の資料。
ただし、各ブラウザでサポートしているかどうかは、
使ってみないとわからない。
Coming Soon...?
iOSプログラマへ。
HTML5 Canvas がおもしろい!

                 DOTAPON Software
                       @cocopon
        http://dotapon.sakura.ne.jp

Weitere ähnliche Inhalte

Was ist angesagt?

【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」nyagasuki
 
Unity C#3からC#6に向けて
Unity C#3からC#6に向けてUnity C#3からC#6に向けて
Unity C#3からC#6に向けてonotchi_
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話Shogo Sensui
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会Yukihiro Kitazawa
 
Coma studyroom
Coma studyroomComa studyroom
Coma studyroomCohei Aoki
 
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!Yuichi Higuchi
 
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceupHtml canvas shooting_and_performanceup
Html canvas shooting_and_performanceupYohei Munesada
 
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダーEiji Kamiya
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001Teruaki Tsubokura
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Hiroshi Yoshida
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイントYohei Munesada
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLAtsushi Tadokoro
 
静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3yaju88
 
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめGLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめYoichi Hirata
 

Was ist angesagt? (19)

【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
 
Unity C#3からC#6に向けて
Unity C#3からC#6に向けてUnity C#3からC#6に向けて
Unity C#3からC#6に向けて
 
これからのJavaScriptの話
これからのJavaScriptの話これからのJavaScriptの話
これからのJavaScriptの話
 
Cocos2d Shaders
Cocos2d ShadersCocos2d Shaders
Cocos2d Shaders
 
0720 abc seminar
0720 abc seminar0720 abc seminar
0720 abc seminar
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
Coma studyroom
Coma studyroomComa studyroom
Coma studyroom
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!シェーダーしよっ☆ Let's play shaders!
シェーダーしよっ☆ Let's play shaders!
 
Html canvas shooting_and_performanceup
Html canvas shooting_and_performanceupHtml canvas shooting_and_performanceup
Html canvas shooting_and_performanceup
 
簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー簡単!OpenGL ES 2.0フラグメントシェーダー
簡単!OpenGL ES 2.0フラグメントシェーダー
 
openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
 
Cocoa勉強会201208
Cocoa勉強会201208Cocoa勉強会201208
Cocoa勉強会201208
 
Gocon2013
Gocon2013Gocon2013
Gocon2013
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイント
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3静岡Developers勉強会 HTML5&CSS3
静岡Developers勉強会 HTML5&CSS3
 
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめGLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
 

Ähnlich wie iOSプログラマへ。HTML5 Canvasがおもしろい!

FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するKeisukeKiriyama
 
HTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲームHTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲームTakumi Ohashi
 
はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理Takashi Yoshinaga
 
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Tomoaki Shimizu
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携Tomoaki Shimizu
 
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」Tomoaki Shimizu
 
JavaScript Hackathon for Students
JavaScript Hackathon for StudentsJavaScript Hackathon for Students
JavaScript Hackathon for StudentsTakumi Ohashi
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】Yasuhito Yabe
 
Interactive Music II Processingによるアニメーション
Interactive Music II ProcessingによるアニメーションInteractive Music II Processingによるアニメーション
Interactive Music II ProcessingによるアニメーションAtsushi Tadokoro
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールTomoaki Shimizu
 
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門Masahiko Mizuta
 
Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことSwiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことyohei sugigami
 
Creators'night#13 tech#2今井
Creators'night#13 tech#2今井Creators'night#13 tech#2今井
Creators'night#13 tech#2今井Daisuke Imai
 
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルTakashi Yoshinaga
 

Ähnlich wie iOSプログラマへ。HTML5 Canvasがおもしろい! (20)

FlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解するFlutterをRenderObjectまで理解する
FlutterをRenderObjectまで理解する
 
Arctic.js
Arctic.jsArctic.js
Arctic.js
 
Canvas勉強会
Canvas勉強会Canvas勉強会
Canvas勉強会
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
HTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲームHTML5で作るスマホブラウザゲーム
HTML5で作るスマホブラウザゲーム
 
深掘りARKit
深掘りARKit深掘りARKit
深掘りARKit
 
はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理はじめようRGB-Dセンシングと画像処理
はじめようRGB-Dセンシングと画像処理
 
JavaFX 2.0 への誘い
JavaFX 2.0 への誘いJavaFX 2.0 への誘い
JavaFX 2.0 への誘い
 
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
 
Android gameprogramming
Android gameprogrammingAndroid gameprogramming
Android gameprogramming
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
 
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
 
JavaScript Hackathon for Students
JavaScript Hackathon for StudentsJavaScript Hackathon for Students
JavaScript Hackathon for Students
 
レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】レスポンシブWebデザイン【発展編】
レスポンシブWebデザイン【発展編】
 
Interactive Music II Processingによるアニメーション
Interactive Music II ProcessingによるアニメーションInteractive Music II Processingによるアニメーション
Interactive Music II Processingによるアニメーション
 
cocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツールcocos2d-xにおけるBox2Dの利用方法および便利なツール
cocos2d-xにおけるBox2Dの利用方法および便利なツール
 
Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門Androidプログラミング初心者のためのゲームアプリ開発入門
Androidプログラミング初心者のためのゲームアプリ開発入門
 
Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことSwiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったこと
 
Creators'night#13 tech#2今井
Creators'night#13 tech#2今井Creators'night#13 tech#2今井
Creators'night#13 tech#2今井
 
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
 

iOSプログラマへ。HTML5 Canvasがおもしろい!

Hinweis der Redaktion

  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