【问题标题】:Corona - Touch Events In table objects?Corona - 表格对象中的触摸事件?
【发布时间】:2013-03-12 13:00:54
【问题描述】:

我正在尝试在项目中使用它,但我无法弄清楚如何为轮播中的每个图标/对象放置一个触摸事件侦听器,如果有人可以快速回答如何做到这一点,我'感激不尽。

    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)

【问题讨论】:

    标签: events lua listener coronasdk lua-table


    【解决方案1】:

    我无法完全理解您真正需要什么。但是,如果您想为 localGroup 中的所有相同图标添加单独的触摸,那么您可以将图标添加为图标数组并为每个图标赋予 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
    

    如果你想将所有组元素识别为相同并进行触摸,那么你可以使用same tag/给所有图标赋予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
    

    【讨论】:

      猜你喜欢
      • 2013-04-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多