Corona SDK旋转

时间:2012-11-12 15:22:08

标签: rotation corona

我正在开发一个涉及时钟的项目,以及一个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,我就不会得到结果。那是因为我没有定义该怎么做(-rotation)

问题:

一段时间后,轮换转移。所以我没有旋转= 0到270和-90到0,但-90到-360 +( - 90)= -450;

有时它变为60到360 + 60 = 420

WTF是吗?! =(

请帮忙,我无法解决这个问题,因为这些“转变”似乎是随机发生的(或者我只是不知道为什么会发生这种转变)

1 个答案:

答案 0 :(得分:0)

你可以试试这个:其中dx和dy等于x的变化和y的变化

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

无论你转向哪个方向或旋转多少,这都会给你0到360之间的正值。