0

私は時計を含むプロジェクトに取り組んでおり、時計の中心に取り付けられている回転ポインター(時計はアナログのようにポインターを備えた古典的であり、デジタルではありません)をドラッグすることで機能する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になります

あれは何だよ?!=(

助けてください、私はそれを回避することはできません、なぜならこれらの「シフト」はランダムに起こるように見えるからです(または私はそれらが起こる理由を理解することができません)

4

1 に答える 1

0

これを試すことができます: ここで、dx と dy は x の変化と y の変化に等しい

angle = ((math.atan2(dx,dy)*180 / math.pi) - 180) * -1

これにより、回転方向や回転数に関係なく、0 から 360 までの正の値が得られます。

于 2013-02-18T20:40:57.363 に答える