Huli's Blog

Learning by sharing

Lidemy 鋰學院是一個為初學者而生的線上程式課程平台,希望能以淺顯易懂的教學,帶領初學者更快速地入門程式設計。你可以直接到網站註冊,或者是追蹤 Lidemy 的粉絲專頁,就能搶先得知課程的最新消息

[Corona] event互相干擾

| Comments

比如我現在有一張背景圖叫做bg
有一個畫出來的矩形叫做rect
當我點擊那個矩形的時候,我想像中的情況是:只有那個矩形的tap事件會發生
但實際上的情況是:bg的tap事件也會被觸發

測試code(部分):

function scene:createScene( event )
    local group = self.view    
    local function bg_tap()
        print("bg tap!!")
    end
    local function rect_tap()
        print("rect tap!!")
    end
    local bg = display.newRoundedRect( screenW*0.5, screenW*0.5, 1000, 1000, 10 )
    bg:setFillColor( black )
    bg:addEventListener( "tap", bg_tap )
    group:insert(bg)

    local rect = display.newRoundedRect( screenW*0.5, screenW*0.5, 100, 100, 10 )
    rect:addEventListener( "tap", rect_tap )
    group:insert(rect)
end

點我點rect的時候
看到的訊息是:

2014-03-20 15:41:11.789 Corona Simulator[2807:507] rect tap!!
2014-03-20 15:41:11.789 Corona Simulator[2807:507] bg tap!!

也就是說兩個事件都會被執行
那該怎麼辦呢?
只要在rect_tap這個事件加上一行return true就好

--原本的

    local function rect_tap()
        print("rect tap!!")
    end
--修改過後

    local function rect_tap()
        print("rect tap!!")
        return true
    end

這樣子就只會執行到第一個事件,而不會一直傳遞下去

參考資料:
Why touch event of bacground through objects above?
http://forums.coronalabs.com/topic/39703-why-touch-event-of-bacground-through-objects-above/

Comments

comments powered by Disqus