quick-cocos2d-x 使用CCScrollView的問題及解決方法

由於CCScrollView是cocos2d-x的中的控件,在quick-cocos2d-x中並沒有對應的UI,由於coco2d-x是觸摸基於優先級的,而quick-cocos2d-x是基於層級的,所以CCScrollView的觸摸事件與quick-cocos2d-x的觸摸機制不同會產生矛盾,會出問題。

1,在使用CCScrollView時,發現CCScrollView所在的視圖會覆蓋掉在其以下層級的視圖的觸摸事件:


即是CCScrollView所在的view1視圖層級比view2層級高,view2中的button按鈕就會接受不到點擊事件。

2,點擊CCScrollView的不可見區域仍可響應:


即:如果點擊ScrollItem:2應該在的位置區域2,區域2不在可見範圍,但仍然可以觸摸,響應點擊事件。

爲了解決以上問題,我們只需要對創建的CCScrollView對象再添加一條觸摸捕獲事件:

	self.scrollView:setTouchEnabled(true)
	self.scrollView:addNodeEventListener(cc.NODE_TOUCH_CAPTURE_EVENT, function(event)
		if event.name == "began" then
			local pos = self.scrollView:convertToNodeSpace(ccp(event.x, event.y))
			if self.scrollView:getBoundingBox():containsPoint(pos) then
				return true
			else
				return false
			end
		end
	end)
以上代碼的意思是:給給創建的CCScrollView對象self.scrollView添加一條觸摸捕獲事件,只有在self.scrollView的可見大小範圍之內觸摸時,self.scrollView對象及其子對象才能接受到觸摸事件,否則不予觸摸。於是便可以解決以上兩個問題。

注:cc.NODE_TOUCH_CAPTURE_EVENT是quick-cocos2d-x迎合Cocos2d-x的一種做法,目的是與coco2d-x的觸摸機制相同,於是用這個觸摸捕獲事件,可以解決因quick-cocos2d-x的觸摸機制不同而帶來的問題。


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