Mark Henry Carousel

Having trouble getting three things:

  1. individual images
  2. urls to open from touch event of each image
  3. fixed position instead of drag gesture

This code uses Mark Henry carousel

[code]
– Main function - MUST return a display.newGroup()
function new()
local localGroup = display.newGroup()


local nImages = 8
local range = 360
local sectionSize = range / nImages
local xCentre = display.contentWidth / 1.75
local yCentre = display.contentHeight / 1
local diameter = display.contentWidth - xCentre/2
local r = diameter / 1.75
local points = {}
local images = {}
local visual = display.newGroup()
local lastTime = system.getTimer()
local interval = 30
local yRotScale = 0.375
local yScale = 1.25
local xScale = 1.25
local depthCounter = 0

– Just a visual cue

local pole

pole = display.newImage(“htmlt.png”)
pole:setReferencePoint(display.CenterReferencePoint)
pole.x = display.contentWidth/3
pole.y = display.contentHeight/2.8

local function sort()

table.sort(images,
function(a, b)
return a.y < b.y
end
)


– Just re-insert. Removing firstly seems to destroy DisplayObjects,
– even if the return value from remove() is put into a table.

myData = {}

myData[1] = {}
myData[1].title = “yahoo”
myData[1].url = “http://www.yahoo.com
myData[1].image = “yahoo.png”
myData[1].id = 1

for i = 1, #images do
visual:insert(images[i])

if i == math.floor(nImages/2) then
visual:insert(pole)
end

end

end

local function rotate()

for i = 1, #images do

local img = images[i]
local cntr = img.counter
local xy = points[cntr]

img.width = img.origWidth
img.height = img.origHeight
img.x = xy[1]
img.y = xy[2] * yRotScale
local s = xy[2] / (yCentre + r)
img.xScale = s * xScale
img.yScale = s * yScale
cntr = cntr + 1

if cntr > range then
cntr = 1
end

images[i].counter = cntr

end

end

– Defaults to first-in, furthest-back. Reverse i for opposite:

for i = 1, nImages do

myData[i] = {}
myData[i].title = myData[i].title myData[i].url = myData[i].url
myData[i].image = myData[i].image

local img = display.newGroup()
local imageone = display.newImage(“violet.png”)
img:insert(imageone)

local img = display.newGroup()
local imagetwo = display.newImage(“jb.png”)
img:insert(imagetwo)

img.counter = counter
img.origWidth = img.width
img.origHeight = img.height
images[#images + 1] = img
counter = counter + sectionSize – placement in pairs array

end

for i = 1, range do

local x = r * math.cos(math.rad(i))
local y = r * math.sin(math.rad(i))
points[#points + 1] = {x + xCentre, y + yCentre}

end

sort()


– Depending on layout (number of images), may need to call this
– after a few beats in case image is about to overlap at start.

rotate()

local function onFrame(event)

local curTime = system.getTimer()

if curTime - lastTime >= interval then
rotate()
lastTime = curTime
end

– Don’t sort every frame.
– sectionSize is granularity of sorting.

if depthCounter % sectionSize == 0 then
sort()
end

depthCounter = depthCounter + 1

end

Runtime:addEventListener(“enterFrame”, onFrame)

local function onTouch(self, event)
if event.phase == “began” then
self.startX = event.x
self.startY= event.y
display.getCurrentStage():setFocus(self)
elseif event.phase == “moved” then
local movedX = event.x - self.startX
local movedY = event.y - self.startY
print(movedX, movedY)
self.x = self.x + movedX
self.y = self.y + movedY
self.startX = event.x
self.startY = event.y
elseif event.phase == “ended” then
display.getCurrentStage():setFocus(nil)
end
end

visual.touch = onTouch
visual:addEventListener(“touch”, visual)
[/code] [import]uid: 88495 topic_id: 30739 reply_id: 330739[/import]