This is a complete working example.
local squares = display.newGroup()
local wheelX = display.contentCenterX
local wheelY = display.contentCenterY
local radius = 220
local degrees = -180
local squareH = 150
local square = display.newRect(0,0,squareH,squareH)
square:setFillColor(255,255,255)
square.degStart = 100
squares:insert(square)
local square2 = display.newRect(0,0,squareH,squareH)
square2:setFillColor(999,255,55)
square2.degStart = -10
squares:insert(square2)
local function drawRects(degrees)
local rads = (square.degStart + degrees) * (math.pi / 180.0)
square.x = radius * math.cos(rads) + wheelX
square.y = radius * math.sin(rads) + wheelY
local rads2 = (square2.degStart + degrees) * (math.pi / 180.0)
square2.x = radius * math.cos(rads2) + wheelX
square2.y = radius * math.sin(rads2) + wheelY
end
local function getDegrees(square)
local x = square.x
local y = square.y
local degrees = math.atan2((y - wheelY) , (x - wheelX)) * (180 / math.pi)
return degrees
end
local function onTouch( event )
local t = event.target
local phase = event.phase
local parent = t.parent
if "began" == phase then
print("began")
parent:insert( t )
display.getCurrentStage():setFocus( t )
t.isFocus = true
square.degStart = getDegrees(square)
square2.degStart = getDegrees(square2)
elseif t.isFocus then
if "moved" == phase then
degrees = math.atan2((event.yStart - wheelY) , (event.xStart - wheelX)) * (180 / math.pi)
degrees2 = math.atan2((event.y - wheelY) , (event.x - wheelX)) * (180 / math.pi)
diffDegrees = degrees2 - degrees
drawRects(diffDegrees)
print("diffDegrees: " .. diffDegrees)
elseif "ended" == phase or "cancelled" == phase then
display.getCurrentStage():setFocus( nil )
t.isFocus = false
end
end
return true
end
squares:addEventListener( "touch", onTouch )
drawRects(degrees)
It took me a lot of time.