ofruby開発日誌(1) - タッチ操作の組み込み

ofrubyのダウンロードはこちらからどうぞ。

ofruby0.2(審査待ち→今朝通過しました)でタッチした複数の位置情報を取得出来るようになりました。

module Input
  # タッチ位置を取得(0〜4)
  def self.touch(idx)

  # 全てのタッチ位置をArrayで取得
  def self.touches
end

class TouchPoint
  # タッチしているか?
  def valid?

  # x座標
  def x
  
  # y座標
  def y
  
  # 押した瞬間にtrue
  def press?

  # 押しているか?(valid?と同じ) 
  def down?

  # 離した瞬間にtrue
  def release?
end

内部でC++で管理しているタッチ情報をRubyのArrayで保持するようにしたのですが、上手くいってかなりすっきりした実装になりました。

範囲外アクセスはArrayが勝手にやってくれますし、

Input.touch(10) # Arrayの範囲外エラー
Input.touch(-1) # 同じく

Input.touchesを使うとRubyらしい表現を使ってタッチ位置を処理出来るようになります。美しいですね。

# 最初に見つかったタッチ位置を返す(見つからない時はnilを返す)
t = Input.touches.find { |t| t.valid? }

# タッチしているタッチ点のみを抜き出す
touches = Input.touches.find_all { |t| t.valid? }

# 2点以上タッチしているか?
if touches.size >= 2
  # 中点を求める
  center_x = touches.reduce(0) { |a, e| a + e.x } / touches.size
  center_y = touches.reduce(0) { |a, e| a + e.y } / touches.size
end

入力を取ることが出来れば作れるものの幅がかなり広がります。早く審査が通って欲しい所です。