quick的sample代碼整理(一):觸摸事件(上)


1. 多點觸摸 (2.2.6)

1.1 多點觸摸的基礎(chǔ)使用

簡化流程:

  • 開啟觸摸
  • 選擇觸摸模式
  • 設(shè)置觸摸監(jiān)聽事件

詳細(xì)代碼:

self.sprite:setTouchEnabled(true)
self.sprite:setTouchMode(cc.TOUCH_MODE_ALL_AT_ONCE) -- 多點
--self.sprite:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE) -- 單點(默認(rèn)模式)
  • event.name 為觸摸事件的狀態(tài):began, moved, ended, cancelled, added(僅限多點觸摸), removed(僅限多點觸摸)

  • 多點觸摸時冤竹,event.points保存的為多個觸摸點,所以需要遍歷每個觸摸點來對觸摸點進行特殊化處理

self.sprite:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
 if event.name == "began" or event.name == "added" then
            self.touchIndex = self.touchIndex + 1
            for id, point in pairs(event.points) do
                --對每個點進行處理
            end
        elseif event.name == "moved" then
            for id, point in pairs(event.points) do 
            end
        elseif event.name == "removed" then
            for id, point in pairs(event.points) do
                self.cursors[id]:removeSelf()
                self.cursors[id] = nil
            end
        else
            for _, cursor in pairs(self.cursors) do
                cursor:removeSelf()
            end
            self.cursors = {}
        end
end
1.2 保證觸摸在矩形范圍內(nèi)才有效
  • 給當(dāng)前精靈繪制一個矩形區(qū)域
  • 取得矩形區(qū)域
  • 判斷觸摸點是否在矩形區(qū)域

詳細(xì)代碼如下:
畫出矩形范圍,加入父節(jié)點

function drawBoundingBox(parent, target, color)
    local cbb = target:getCascadeBoundingBox()
    local left, bottom, width, height = cbb.origin.x, cbb.origin.y, 
                                        cbb.size.width, cbb.size.height
    local points = {
        {left, bottom},
        {left + width, bottom},
        {left + width, bottom + height},
        {left, bottom + height},
        {left, bottom},
    }
    local box = display.newPolygon(points, 1.0)
    box:setLineColor(color)
    parent:addChild(box, 1000)
end

取得矩形并且判斷觸摸點是否在矩形內(nèi)

local rect = self.sprite:getBoundingBox()
if rect:containsPoint(cc.p(point.x, point.y)) then
  -- 檢查觸摸點的位置是否在矩形內(nèi)
end
1.3 觸摸捕獲事件

什么是觸摸捕獲事件
它是觸摸事件的第一個階段淑际,如果事件返回結(jié)果為false,就不觸發(fā)觸摸事件

觸摸捕獲事件的性質(zhì)

  • 觸摸捕獲事件是默認(rèn)開啟的 setTouchCaptureEnabled(true)
  • 觸摸捕獲事件優(yōu)先級高于觸摸事件,并且有權(quán)不分發(fā)給觸摸事件響應(yīng)

觸摸捕獲事件的流程

  1. 遍歷所有響應(yīng)觸摸的節(jié)點茵乱,找出顯示層級最高(zOrder高到低),并且其觸摸區(qū)域包含觸摸位置的節(jié)點Node孟岛,標(biāo)記為TargeNode
  2. 檢查TargeNode是否有開啟觸摸捕獲瓶竭,如果返回false,重復(fù)1
  3. 從TargeNode的根節(jié)點(一般為Sence)開始渠羞,檢查cc.NODE_TOUCH_CAPTURE_EVENT事件的返回結(jié)果斤贰,任何一個節(jié)點返回false都會阻止事件在TargeNode上觸發(fā)。重復(fù)123

以下是cc.NODE_TOUCH_CAPTURE_EVENT的事件監(jiān)聽

self.button2:addNodeEventListener(cc.NODE_TOUCH_CAPTURE_EVENT, function(event)
        printf("%s %s [CAPTURING]", "button2", event.name)
        return true
end)
1.4 觸摸事件的流程

觸摸事件分為三個階段:capturing(捕獲) targeting(觸發(fā)) bubbling(冒泡或傳遞)

觸發(fā)流程
在TargetNode上觸發(fā)事件次询,響應(yīng)自己的觸摸事件荧恍,如began,moved屯吊,ended等

冒泡流程
在TargetNode完成事件響應(yīng)后送巡,檢查它是否將觸摸吞噬(isTouchSwallowEnabled()),如果有盒卸,就不再將事件往下傳遞

1.5 禁用觸摸

如果禁用某個節(jié)點的觸摸事件骗爆,它的子節(jié)點仍舊響應(yīng)觸摸。所以如果當(dāng)我們需要禁止對話框中的所有 Node 響應(yīng)觸摸蔽介,那么就要禁止對話框 Node 捕獲事件(setTouchCaptureEnabled(false))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摘投,一起剝皮案震驚了整個濱河市煮寡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌犀呼,老刑警劉巖幸撕,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異圆凰,居然都是意外死亡杈帐,警方通過查閱死者的電腦和手機体箕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門专钉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人累铅,你說我怎么就攤上這事跃须。” “怎么了娃兽?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵菇民,是天一觀的道長。 經(jīng)常有香客問我投储,道長第练,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任玛荞,我火速辦了婚禮娇掏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勋眯。我一直安慰自己婴梧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布客蹋。 她就那樣靜靜地躺著塞蹭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讶坯。 梳的紋絲不亂的頭發(fā)上番电,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音辆琅,去河邊找鬼钧舌。 笑死,一個胖子當(dāng)著我的面吹牛涎跨,可吹牛的內(nèi)容都是我干的洼冻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼隅很,長吁一口氣:“原來是場噩夢啊……” “哼撞牢!你這毒婦竟也來了率碾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤屋彪,失蹤者是張志新(化名)和其女友劉穎所宰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畜挥,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡仔粥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蟹但。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躯泰。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖华糖,靈堂內(nèi)的尸體忽然破棺而出麦向,到底是詐尸還是另有隱情,我是刑警寧澤客叉,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布诵竭,位于F島的核電站,受9級特大地震影響兼搏,放射性物質(zhì)發(fā)生泄漏卵慰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一佛呻、第九天 我趴在偏房一處隱蔽的房頂上張望裳朋。 院中可真熱鬧,春花似錦件相、人聲如沸再扭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泛范。三九已至,卻和暖如春紊撕,著一層夾襖步出監(jiān)牢的瞬間罢荡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工对扶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留区赵,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓浪南,卻偏偏與公主長得像笼才,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子络凿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的。 ??事件摔踱,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評論 1 11
  • 事件是什么虐先,可以用來做什么,什么時候用到它派敷? 事件蛹批,就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬間。JavaScr...
    茂茂愛吃魚閱讀 1,517評論 0 16
  • 好奇觸摸事件是如何從屏幕轉(zhuǎn)移到APP內(nèi)的篮愉?困惑于Cell怎么突然不能點擊了腐芍?糾結(jié)于如何實現(xiàn)這個奇葩響應(yīng)需求?亦或是...
    Lotheve閱讀 57,069評論 51 599
  • 在iOS開發(fā)中經(jīng)常會涉及到觸摸事件潜支。本想自己總結(jié)一下甸赃,但是遇到了這篇文章柿汛,感覺總結(jié)的已經(jīng)很到位冗酿,特此轉(zhuǎn)載。作者:L...
    WQ_UESTC閱讀 6,009評論 4 26
  • 有些工作有待完成,時間貌似夠用貌笨,還有一筆債務(wù)要去付清弱判,然后生活就會開始,最后我終于明白锥惋,這些障礙昌腰,正是我的生活“虻—...
    溫姬拉閱讀 1,548評論 0 0