quick-cocos2d-x遊戲開發【11】——多點觸摸

在前面已經談過單點觸摸的用法了,所以對於多點觸摸來說,也是非常簡單容易的。


多點觸摸其擁有added,removed這麼兩個獨有事件。

added  屏幕中增加了一個觸點

removed  屏幕中移除了一個觸點


另外,還有這麼一個event.points 屏幕中全部觸點信息,

每一個觸點依然可以獲取到其,

point.x, point.y                         觸摸點的當前位置
point.prevX, point.prevY         觸摸點之前的位置
point.id                                     觸摸點 id,用於確定觸摸點的變化


結合單點觸摸的幾個事件,所以多點觸摸事件發生時,會有began,added,moved,removed,ended,canclled這些響應事件。

你可能會疑惑began和added觸發的順序,我們在使用cocos2d-x c++的時候,多點觸摸還是寫在began當中,只是觸摸點參數是一個集合,包含了全部觸點的信息。但在quick中,將多點信息封裝得更加方便。當第一個觸點觸摸到屏幕時,響應的是began事件,之後再有觸點在屏幕時,就會觸發added事件了,這樣一來,我們就能清楚的知道玩傢什麼時候第二個手指也接觸到屏幕了。如果在c++中,就需要再寫些代碼來判斷了。


因此,removed和ended響應事件也就容易理解了觸發順序了,當有觸點離開屏幕時,只要event.points中觸點的個數大於等於2,那麼會響應removed事件,當屏幕中最後一個觸點離開時,會響應ended事件。


對於event.points中每個觸點的信息,我們通過循環就可以依次獲取了。

for id, point in pairs(event.points) do
    printf("%d, %f, %f", id, event.points[id].x, event.points[id].y)
end


是不是很簡單,好了,咱們來個完整點的代碼,

function MyScene:ctor()	
    
    local layer = display.newLayer()
    self:addChild(layer)
    layer:setTouchEnabled(true)
    layer:setTouchMode(cc.TOUCH_MODE_ALL_AT_ONCE)
    layer:addNodeEventListener(cc.NODE_TOUCH_EVENT, function (event)
        if event.name == "began" or event.name == "added" then
            for id, point in pairs(event.points) do
                printf("%d, %f, %f", id, event.points[id].x, event.points[id].y)
            end
        elseif event.name == "removed" then
            print("touch removed")
        elseif event.name == "moved" then
            print("touch moved")
        elseif event.name == "ended" then
            print("touch ended")
        end

        return true
    end)
	
end

不過這個測試,只有放到真機上檢驗了,quick的模擬器還只能做單點檢測。


此外,還要說明的一個就是,單點和多點觸摸的區域,一旦一個node上有多個精靈,那麼它的觸摸響應區域則是它們共同區域的大小,下圖中紅色區域的大小。


這裏要更正一個小問題,在第二節創建場景中,newScene的參數是場景的名稱,這裏需要和創建的lua文件名稱相同,否則雖然在模擬器中運行沒有問題,在android設備上就會提示沒有找到這個lua文件。

所以我們之前創建的MyScene.lua文件,裏面的代碼需要更正下。

local MyScene = class("MyScene", function ()  
    return display.newScene("MyScene") --場景名稱要一致 
end) 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章