touch
イベントとイベントを使用して、コロナでiPadスタイルの慣性スクロールを模倣しようとしていenterFrame
ます。つまり、iPadでのスクロールと同じように、オブジェクトをある程度ドラッグして「投げる」ことができるはずです。私はコロナにかなり慣れていませんが、以前は他の言語を使用していました。(これは私の2日目です。)
これは私がこれまでに持っているコードです:
local bg = display.newImage("cloud.jpg");
bg:setReferencePoint(bg.TopLeftReferencePoint);
bg.x = 0;
bg.y = 0;
function bg:touch (event)
print("event", event)
for i,v in pairs(event) do
print("**: ",i,v)
end
bg.x = event.x;
bg.y = event.y;
bg.xStart = event.xStart;
bg.yStart = event.yStart;
if (event.phase == "ended")
then
bg.xdelta = bg.xStart + bg.x;
bg.ydelta = bg.yStart + bg.y;
Runtime.addEventListener("enterFrame", bg);
end
end
function bg:enterFrame(event)
bg.x = bg.x + bg.xdelta;
bg.y = bg.y + bg.ydelta;
// TODO: Add code to decrease delta so that object gradually stops.
end
bg:addEventListener("touch");
これにより、コンパイラでエラーが発生します。私は何が間違っているのですか?enterFrame関数をテーブル関数ではなくローカル関数にしようとしましたが、同じ問題が発生しました。答えは非常に単純だと確信していますが、コロナに精通していないため、すぐに確認できません。
編集:私はいくつかの読書をしました、そして私はこれが私が望むものに近いことに気づきました:
local bg = display.newImage("cloud.jpg");
bg:setReferencePoint(bg.TopLeftReferencePoint);
bg.x = 0;
bg.y = 0;
bg.xdelta = 0;
bg.ydelta = 0;
local function onEveryFrame(event)
bg.x = bg.x + (bg.oldx - bg.x);
bg.y = bg.y + (bg.oldy - bg.y);
end
function bg:touch (event)
if (event.phase == "ended")
then
print("ended")
bg.oldx = bg.x;
bg.oldy = bg.y;
bg.x = event.x;
bg.y = event.y;
Runtime.addEventListener("enterFrame", onEveryFrame)
end
print("event", event)
for i,v in pairs(event) do
print("**: ",i,v)
end
bg.oldx = bg.x;
bg.oldy = bg.y;
bg.x = event.x;
bg.y = event.y;
print("bg.x:", bg.x)
print("bg.oldx:", bg.oldx)
print("bg.y:", bg.y)
print("bg.oldy:", bg.oldy)
end
bg:addEventListener("touch");
これはもはやエラーではありませんが、私も望ましい結果を得ていません...