devlog [naru design]

プログラミングやテクニカルな内容の覚え書き。

cocos2dのタッチイベントのハンドリングを確認中。
スライダーのようなUIも実現したかったので、スプライトをドラッグアンドドロップするコードを書いてみました。

cocos2dでは、以下の2つの方法でタッチイベントのハンドリングができます。

  1. CCStandardTouchDelegateプロトコルを使う
  2. CCTargetedTouchDelegateプロトコルを使う

ここでは、1.の方法でおこないます。

スプライトの追加

ファイルからスプライトを作成してレイヤーに追加します。
スプライトの移動範囲も予め計算しておきます。

9-11行目:ファイルからスプライトを作成し、位置を設定してレイヤーに追加
14-15行目:スプライトが画面から飛び出さないように可動範囲を計算
17行目:タッチイベントを有効にします

タッチ開始時に呼び出されるメソッド

スプライトがタッチされたかどうかを確認し、タッチ開始時の座標を保存します。

3行目:配列からtouchオブジェクトを取得
4行目:touchオブジェクトからタッチされた座標を取得
5行目:OpenGL系の座標に変換
7行目:スプライトがタッチされたかを、スプライトのバウンディングボックスとタッチされた座標から判断
10行目:タッチされた座標を保持

ドラッグ中に呼び出されるメソッド

範囲内でドラッグされていることを確認し、スプライトを移動します。

7行目:タッチが開始されているかを判断(開始前は-999が格納されている)
9行目:スプライトの新たな位置をタッチ開始座標と現在ドラッグ中の座標の差分から計算
10,11行目:移動範囲を超えていないか確認し補正する
13行目:補正された位置をスプライトに適用
14行目:次のドラッグ操作にむけて、現在の座標をタッチ開始位置にセット

タッチ終了時に呼び出されるメソッド

ドラッグ中を認識し、タッチ開始位置をリセットします。

3行目:ドラッグ中かを確認(po.xは、ドラッグされていないと-999)
6行目:タッチ開始位置をリセット

※ ソースコードは、こちら:spriteDragAndDrop

Pocket
[`evernote` not found]

コメントを残す

Trackback URL: