当在滚动组中使用触摸功能时,如何正确触发触摸功能(Corona)?

在滚动组中使用触摸功能

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

我看到其他人也遇到了这个问题,但他们的解决方案从未解决我的问题 - 我尚未看到使用表格的解决方案。在下面的代码中,实施了解决其他人问题的代码。

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

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最慢
}
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”) - 制作不同的页面链接图像
    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]。图片

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

    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或dy> 10 then
                                  scrollView:takeFocus(event)
                            结束

上面的部分是为其他人解决此问题的部分... 它检查x或y转换是否大于10,将焦点放在我的滚动视图上

        elseif e.phase == “ended” then - 它从未到达这一部分...
            if page [i]。exists == true then
                storyboard.gotoScene(myScene..i)
            else
                audio.play(soon)
            end
        结束
    end
    img:addEventListener(“ touch”)
结束
点赞
用户2167925
用户2167925

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

使用下面的代码代替,应该可以工作。

function imgtoucheif e.phase =="began" then
        - 在这里做些什么
    elseif e.phase =="moved" then
        local dx = math.abs(e.x - e.xStart)
        local dy = math.abs(e.y - e.yStart)
        if dx>10或dy>10 then
            scrollView:takeFocus(event)
        结束
    elseif e.phase =="ended" then
        如果page [i]。存在== true then
            storyboard.gotoScene(myScene.. i)
        别的
            audio.play(soon)
        结束
    结束
    return true
end
2013-05-02 05:36:26