2

滚动组中的触控功能

我正在尝试将触摸事件侦听器添加到放置在滚动组中的对象。滚动部分工作正常,但触摸功能的“结束”部分从未注册。

我已经看到其他人遇到过这个问题,但他们的解决方案从未解决我的问题 - 我还没有看到任何使用表。在我下面的代码中,它实现了解决其他人问题的代码。

我曾尝试以不同的顺序重新组织所有内容,但这似乎并没有改变任何东西。

local widget = require("widget")

local scrollView = widget.newScrollView
{
   left = 100,
   top = 200,
   width = 900,
   height = 500,
   maskFile = "white.png"
   scrollWidth = 2000,
   scrollHeight = 400,
   hideBackground = true,
   friction = 0.9 --0 is slowest
}
scrollView.x = 0
scrollView.y = H/2 - scrollView.height/2

上面的滚动屏幕工作正常...

local page = {}
page[1] = {exists = true}
page[2] = {exists = true}
page[3] = {exists = true}
page[4] = {exists = true}
page[5] = {exists = true}
page[6] = {exists = true}
page[7] = {exists = true}
page[8] = {exists = true}
page[9] = {exists = false}
page[10] = {exists = false}

上面我创建了一个表。

for i = 1,#page do
    if page[i].exists == true then
        page[i].img = display.newImage("images/"..myScene..i..".png") --makes the different page link images    
    else
        page[i].img = display.newImage("images/coming.png")
    end
    page[i].img:setReferencePoint( display.CenterReferencePoint)
    page[i].img.x = (W+(i*2*W))/9 - 2*W/8 + 50 
            page[i].img.y = scrollView.height/4+20
    
    if i > #page/2 then
        page[i].img.x = (W+((i-#page/2)*2*W))/9 - 2*W/8 + 50
        page[i].img.y = page[i].img.y + scrollView.height/2-20
    end
    

    local img = page[i].img

我将其重命名为局部变量,因为触摸功能不喜欢 [ ]

    scrollView:insert(img)
    group:insert(scrollView)

    function img:touch(e)
        if e.phase == "began" then
            display.getCurrentStage():setFocus( img )
            img.isFocus = true

        elseif e.phase == "moved" then

                            local dx = math.abs( e.x - e.xStart ) 
                            local dy = math.abs( e.y - e.yStart ) 

                            if dx > 10 or dy > 10 then
                                  scrollView:takeFocus( event ) 
                            end

上面的部分据说可以为其他人解决这个问题。它检查 x 或 y 转换是否超过 10 将焦点放在我的滚动视图上

        elseif e.phase == "ended" then --it never gets to this part...
            if page[i].exists == true then
                storyboard.gotoScene(myScene..i)
            else
                audio.play(soon)
            end
        end
    end
    img:addEventListener("touch")
end
4

1 回答 1

1

在您的 img:touch(e) 函数中,您需要在最后一个结尾之前添加“return true”......如下所示。此外,您可以删除函数中不必要的额外代码( setFocus (img) 和 img.isFocus = true )。我发现该代码在 Android 设备上表现不佳。

请改用下面的代码,它应该可以工作。

function img:touch(e)
    if e.phase == "began" then
        -- do something here
    elseif e.phase == "moved" then
        local dx = math.abs( e.x - e.xStart ) 
        local dy = math.abs( e.y - e.yStart ) 
        if dx > 10 or dy > 10 then
            scrollView:takeFocus( event ) 
        end
    elseif e.phase == "ended" then
        if page[i].exists == true then
            storyboard.gotoScene(myScene..i)
        else
            audio.play(soon)
        end
    end
    return true
end
于 2013-05-02T05:36:26.557 回答