12月
30

前回のflashcast:フリーで働くITエンジニア集団のブログ: ipod touch用のWeb Applicationを作成してみる(画面作り編)の続きです。

今回は、canvas部分を作ってみます。
とりあえず、細かい機能は別として、タッチで絵を描いてみます。

画面作成のときにも参考にした
トップページ – iPhone 3G DevWiki
を参考にしました。

タッチのイベントとして、
touchstart, touchmove, touchend
があるそうなので、これを使うことにします。

ipod touchは、複数の指で触れるので、イベントが起きたあとに
何番目に触ったやつかを判定する必要があるみたい。

今回は、1回目に触ったやつのイベントだけを使って
それ以外は使わないことにします。

で、できたのがこんな感じ。jqueryを使いました。

 $("body").bind("touchstart", function(){
  if(event.touches[0]){
   var x = event.touches[0].pageX - CANVAS_LEFT;
   var y = event.touches[0].pageY - CANVAS_TOP;

   if(x >= 0 && x < CANVAS_WIDTH && y >= 0 && y < CANVAS_HEIGHT){
    _isTouch = true;
    _isDraw = true;

    _c2d.beginPath();
    _c2d.moveTo(x, y);

    event.preventDefault();
   }
  }
 });

 $("body").bind("touchend", function(){
  var x,y;

  if(event.changedTouches[0]){
   _isTouch = false;

   if(_isDraw){
    _isDraw = false;

    var x = event.changedTouches[0].pageX - CANVAS_LEFT;
    var y = event.changedTouches[0].pageY - CANVAS_TOP;

    _c2d.lineTo(x, y);
    _c2d.closePath();
    _c2d.stroke();

    event.preventDefault();
   }
  }
 });

 $("body").bind("touchmove", function(){
  if(event.touches[0]){
   var x = event.touches[0].pageX - CANVAS_LEFT;
   var y = event.touches[0].pageY - CANVAS_TOP;

   if(_isDraw){
    _c2d.lineTo(x, y);
    _c2d.stroke();
   }

   if(_isTouch){
    if(x >= 0 && x < CANVAS_WIDTH && y >= 0 && y < CANVAS_HEIGHT){
     _isDraw = true;
     _c2d.moveTo(x, y);
    }else{
     if(_isDraw){
      _isDraw = false;
      _c2d.closePath();
     }
    }
   }

   if(_isDraw){
    event.preventDefault();
   }
  }
 });

ポイントとしては

$(”body”).bind(”touchstart”, function(){
if(event.touches[0]){

イベントの取得には、eventを使うところです。

仮に、以下のように書くとうまくいきません。

$(”body”).bind(”touchstart”, function(e){
if(e.touches[0]){

event.touches[0]を使って、1個目に触った指だけを処理しています。

ちなみに、

$(”body”).bind(”touchend”, function(){
if(event.changedTouches[0]){

touchendの場合は、changedTouchesを拾わなくてはいけないようです。

イベントの取り方はこんな感じでしょうか。

次は、イベントのキャンセルです。
ipod touchは、スクロールなどもタッチで行いますが、絵を描いてる途中に画面が動いたらいやなので、canvasの中でイベントが起きた時とかには、イベント自体をキャンセルしてあげます。

event.preventDefault();

これで、変な風に画面が動かなくなります。

ここまでの画面はこんな感じです

ちなみにdoctypeは悩んだのですがいったん、HTML4で作ることにしました。
あとで、それなりの形式に変えようと思います。

ipod touchかiphoneを持っている方は、以下で試してみてください!
tonomemo
※canvas部分(黄色のとこ)をタッチすると絵が描けます!

Trackback URL

※この記事へのトラックバック用 URL

1 Trackback

コメントする

  • Search:
  • flashcastとは?

    東京を中心に、現在フリーランスとして活動しているITエンジニア、および、かつてフリーランスとして活動していた起業家達が立ち上げたコミュニティーです。

    みんなで集まって面白いことをやろう!形に残そう!ということで、ブログをはじめました。

    技術情報や、フリーエンジニアに役立つ情報などを、ご紹介できたらと思っています。

    お問い合わせ:
    info@flashcast.jp
  • カレンダー

  • メンバー紹介

    もじゃもじゃ
    flashcastのリーダー

    3年ほどフリーのITエンジニアとして活動。現在は、社員2名の株式会社を経営しています。

    一攫千金を夢見る野心家です。

    ライブキャスト

    yasu
    ダイバー

    自宅サーバーでホームページを作り始めました。

    少しずつ記事を増やしていきますので足を運んでください。

    よろしくお願いします。

    sa-sa-ki.jp

    のら
    たびびと

    ねこ好きに悪人はいなーいっ!!

    バイクや車も好きです。

    めぐ
    デザイナーのたまご

    音楽とデザインとお酒をこよなく愛する永遠のダイエッター。

    現在ペンタブレットでイラストを勉強中。

    Hiro
    コンサル

    PMやSEの案件を業務委託で請けることが多いですが、小規模案件も受託でやっています。

    得意な分野はマイクロソフト製品や関連技術によるシステム構築です。

    KEI
    取締役の風格

    最年少なのに、メンバーで1番の貫禄の持ち主!?

    C#や.netなどサーバ側の開発が得意。

    ろっきー
    美食家★パパ

    自分にとっての息抜きは、ドライブして温泉に入って、美味しいご飯を食べる事。

    ココロとカラダのリフレッシュを大切にし、日々の仕事に励む一児の父親です。

    郵便番号検索

    my-hobby

    とのさま
    げーむのおうさま

    大人なのに好きなことしかやらない駄目人間。

    Web系が得意、アクセスは苦手><

    tonosamart.com

    セクレタリアト
    ギャンブラー

    フリーランス時代は仲間の現場を探すことが多く、それをきっかけに会社を設立。

    現在はSI業に特化せず、他の業種にも興味を持ち始めています。

    メドレー株式会社

  • 広告