私は時計を含むプロジェクトに取り組んでおり、時計の中心に取り付けられている回転ポインター(時計はアナログのようにポインターを備えた古典的であり、デジタルではありません)をドラッグすることで機能するset_alarmメカニズムです。アラームを設定します)アラームを設定できます。ソースは次のとおりです。
local function rotateObj2(event)
local t = event.target
local phase = event.phase
if (phase == "began") then
display.getCurrentStage():setFocus( t )
t.isFocus = true
-- Store initial position of finger
t.x1 = event.x
t.y1 = event.y
elseif t.isFocus then
if (phase == "moved") then
animateAlarm = true
t.x2 = event.x
t.y2 = event.y
angle1 = 180/math.pi * math.atan2(t.y1 - t.y , t.x1 - t.x)
angle2 = 180/math.pi * math.atan2(t.y2 - t.y , t.x2 - t.x)
print("angle1 = "..angle1)
rotationAmt = angle1 - angle2
--rotate it
t.rotation = t.rotation - rotationAmt
print ("t.rotation = "..t.rotation)
t.x1 = t.x2
t.y1 = t.y2
alarm.rotation = t.rotation
setAlarm.rotation = t.rotation
print ("setAlarm.rotation = "..t.rotation)
if(alarm.rotation >=0)then
local hourValue = math.floor(t.rotation/30)
local minuteValue = math.floor(t.rotation*2)
local hour = hourValue
local minute = minuteValue
if(minuteValue>=720 and minuteValue<780)then
minute = minuteValue-720
elseif(minuteValue>=660 and minuteValue<720)then
minute = minuteValue-660
elseif(minuteValue>=600 and minuteValue<660)then
minute = minuteValue-600
elseif(minuteValue>=540 and minuteValue<600)then
minute = minuteValue-540
elseif(minuteValue>=480 and minuteValue<540)then
minute = minuteValue-480
elseif(minuteValue>=420 and minuteValue<480)then
minute = minuteValue-420
elseif(minuteValue>=360 and minuteValue<420)then
minute = minuteValue-360
elseif(minuteValue>=300 and minuteValue<360)then
minute = minuteValue-300
elseif(minuteValue>=240 and minuteValue<300)then
minute = minuteValue-240
elseif(minuteValue>=180 and minuteValue<240)then
minute = minuteValue-180
elseif(minuteValue>=120 and minuteValue<180)then
minute = minuteValue-120
elseif(minuteValue>=60 and minuteValue<120)then
minute = minuteValue-60
end
if (hour < 10) then hour = "0" .. hour end
if (minute < 10) then minute = "0" .. minute end
hourField.text = hour
minuteField.text = minute
end
elseif (phase == "ended") then
display.getCurrentStage():setFocus( nil )
t.isFocus = false
print ("ENDEDsetAlarm.rotation = "..setAlarm.rotation)
end
end
-- Stop further propagation of touch event
return true
end
問題は、目覚まし時計の値(03.45など)を定義しようとしても問題がないことです。ご覧のとおり、ポインタの回転を変換します。しかし、回転が-90未満または270を超えると、結果が得られません。それは私がそれをどうするかを定義しなかったからです(-回転)
問題:
しばらくすると、回転がシフトします。したがって、回転= 0から270および-90から0はありませんが、-90から-360 +(-90)= -450;
時々それは60から360+60=420になります
あれは何だよ?!=(
助けてください、私はそれを回避することはできません、なぜならこれらの「シフト」はランダムに起こるように見えるからです(または私はそれらが起こる理由を理解することができません)