タッチ
get_touch
pico.get_touch
pico.get_touch() -> x: integer, y: integer, is_touched: boolean
現在(直近)のタッチ位置を返します。座標は pico.draw_* / pico.content_rect() と同じ絶対スクリーン座標です。
pico.on(some_id, "press_start", function(id)
local x, y = pico.get_touch()
pico.log("tapped at " .. x .. "," .. y)
end)
- タッチのイベント(
press_startなど)は座標を引数でも受け取れます(イベント)。この関数は、それ以外の場所で今のタッチを知りたいときに使います。 press_startのコールバックの中で呼べば、そのタップの座標と一致します。press_end(離した瞬間)のコールバック内で呼んだ場合、x/yは離す直前の最後の位置を保持したままですが、is_touchedはfalseになります。press_start等のイベントを介さず、loop(dt)の中から画面の状態を素朴にポーリングする使い方もできます(is_touchedで押下中かどうかを見る)。
使用例: 1枚のCanvasでマス目を判定する
1枚の大きな Canvas で、タップされたマスを求めます(イベントの引数 lx, ly を使っても同じことができます)。
local CELL = 24
local canvas_x, canvas_y = 20, 40
local canvas = pico.create("Canvas")
pico.set(canvas, "x", canvas_x)
pico.set(canvas, "y", canvas_y)
pico.set(canvas, "w", CELL * 8)
pico.set(canvas, "h", CELL * 8)
pico.on(canvas, "press_start", function(id)
local x, y = pico.get_touch()
local col = math.floor((x - canvas_x) / CELL) + 1
local row = math.floor((y - canvas_y) / CELL) + 1
-- (row, col) が実際に押されたマス
end)
詳しくは Canvasと直接描画 の「タップ位置の取得」も参照してください。