2013-03-02 61 views
0

我想在項目中使用它,但我無法弄清楚如何將觸摸事件監聽器放置在旋轉木馬中的每個圖標/對象上,如果有人可以提供如何做到這一點的快速答案,欣賞它。Corona - 觸摸事件在表格對象中?

local NUM_ITEMS=20; 
    local radiusX= 200; 
    local radiusY= 40; 
    local centerX = 240; 
    local centerY = 160; 
    local speed = 0.05; 
    local perspective = 3;  

    local carousel = display.newGroup() 
    local icons = {} 

    local function zSort(myTable, myGroup) 

      table.sort(myTable, 
        function(a, b) 
         return a.depth < b.depth -- depth is your custom field 
        end 
      ) 
      for i = 1, #myTable do 
        myGroup:insert(myTable[i].img) 
      end 

    end 

function Icon(i) 
     local this = {} 
     local icon = display.newImage(carousel, "images/icon"..i..".png") 
     this.angle = (i-1) * math.rad(360/NUM_ITEMS); 
     this.img = icon 
     return this 
end 

function update(event) 

     local icon 
     local sin = math.sin 
     local cos = math.cos 

     for i=1, NUM_ITEMS, 1 do 

       icon = icons[i] 
       local img = icon.img 

       img.x = cos(icon.angle) * radiusX + centerX 
       img.y = sin(icon.angle) * radiusY + centerY 


       local s = (img.y - perspective)/(centerX + radiusY - perspective) 
       img.xScale = s*0.25 
       img.yScale = s*0.25 

       icon.angle = (icon.angle + speed) --%math.rad(360) 

       icon.depth = s 

     end 

     zSort(icons, carousel) 

end 

for i=1, NUM_ITEMS, 1 do 
     local icon = Icon(i) 
     icons[i] = icon 
end 

function onTouch(event) 
     if(event.phase=="moved") then 
       speed = (event.x - centerX)/2000; 
     end 
end 

Runtime:addEventListener("enterFrame",update) 
Runtime:addEventListener("touch", onTouch) 

回答

1

我無法準確理解你真正需要什麼。但是,如果你想單獨的觸摸添加到所有相同的圖標在本地組,那麼你可以添加圖標,圖標排列,並給specific tag每個,可以給個人觸摸,具體如下:

local icons = {} 
for i=1,10 do 
    icons[i] = display.newImage(i..".png") 
    icons[i].tag = i 
end 

local function touchIt(e) 
    print(e.target.tag) 
    --[[ icons[e.target.tag] can be used to identify 
     and set properties to the touched icon --]] 
end 
for i=1,10 do 
    icons[i]:addEventListener("touch",touchIt) 
end 

OR

如果您想要將所有組元素標識爲相同並給予觸摸,則可以對所有圖標使用same tag/give userdata,並且可以對所有組元素(如下所示)執行相同的觸摸操作。

local icons = {} 
for i=1,10 do 
    icons[i] = display.newImage(i..".png") 
    icons[i].tag = 1 --[[ you can also use icons[i].userdata = "icons" 
         (or any string)--]] 
end 

local function touchIt(e) 
    print(e.target.tag) -- It willo be 1 for all icons 
         --[[ icons[e.target.tag] can be used to identify 
          whether if it is under 'icons' --]] 

    --[[ or use userdata as follows --]] 
    print(e.target.userdata)--[[ out put is a string 
          identifying the group/element--]] 
end 
for i=1,10 do 
    icons[i]:addEventListener("touch",touchIt) 
end