2013-05-02 53 views
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 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 

回答

1

在您的IMG:觸摸(E)功能,你需要添加「返回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 
+0

現在給了我下面的錯誤,當我選擇圖片:/應用/ CoronaSDK /科羅納終端:9號線:54097段錯誤:11「$ PATH /科羅納Simulator.app/Contents/MacOS/Corona模擬器「$ * 註銷 [處理完成] ---然後它崩潰... – 2013-05-03 00:26:24

+1

我收到了更多的代碼。崩潰似乎是因爲widget = require(「widget」)本地進入場景,而不是本地文件或整個場景。將它移出輸入場景解決了崩潰 – 2013-05-03 07:48:48

+0

非常感謝! – 2013-05-03 14:10:46