Cocos2d-x中觸摸事件

理解一個觸摸事件能夠從時間和空間兩方面考慮。

一、觸摸事件的時間方面php

觸摸事件的在時間方面,以下圖所示,能夠有不一樣的「按下」、「移動」和「擡起」等階段,表示觸摸是否剛剛開始、是否正在移動或處於靜止狀態,以及什麼時候結束,也就是手指什麼時候從屏幕擡起。此外,觸摸事件的不一樣階段均可以有單點觸摸或多點觸摸,是否支持多點觸摸還要看設備和平臺。html

 

觸摸事件有兩個事件監聽器:EventListenerTouchOneByOne和EventListenerTouchAllAtOnce ,分別對應單點觸摸和多點觸摸。這些監聽器有一些觸摸事件響應屬性,這些屬性對應着觸摸事件不一樣階段。經過設置這些屬性可以實現事件與事件處理者函數的關聯。函數

EventListenerTouchOneByOne中觸摸事件響應屬性:性能

std::function<bool(Touch*,Event*)> onTouchBegan。當一個手指觸碰屏幕時回調該屬性所指定函數。若是函數返回值爲true,則能夠回調後面的兩個屬性(onTouchMoved和onTouchEnded)所指定的函數,不然不回調。網站

std::function<void(Touch*,Event*)> onTouchMoved。當一個手指在屏幕移動時回調該屬性所的指定函數。this

std::function<void(Touch*,Event*)> onTouchEnded。當一個手指離開屏幕時回調該屬性所的指定函數。spa

std::function<void(Touch*,Event*)> onTouchCancelled。當單點觸摸事件被取消時候回調該屬性所的指定函數。.net

 

說明 std::function是一種通用的函數封裝。std::function的實例能夠是任何能夠調用的目標,這些目標包括:函數、Lambda表達式、綁定表達式以及其它函數對象等。code

EventListenerTouchAllAtOnce 中觸摸事件響應屬性:orm

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesBegan。當多個手指觸碰屏幕時回調該屬性所指定的函數。

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesEnded。當多個手指在屏幕上移動時回調該屬性所指定的函數。

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesMoved。當多個手指離開屏幕時回調該屬性所指定的函數。

std::function<void(conststd::vector<Touch*>&, Event*)> onTouchesCancelled。當多點觸摸事件被取消時回調該屬性所指定的函數。

 

使用這些屬性的代碼片斷演示了它們的使用:

 

[html] view plaincopy在CODE上查看代碼片派生到個人代碼片

 

  1. auto listener =EventListenerTouchOneByOne::create();  

  2. listener->onTouchBegan =CC_CALLBACK_2(HelloWorld::touchBegan, this);  

  3. ... ...  

  4. bool HelloWorld::touchBegan(Touch*touch, Event* event) {  

  5.     ......  

  6.     returnfalse;  

  7. }  

 

 

首先咱們須要使用EventListenerTouchOneByOne::create()建立單獨觸摸事件監聽器對象。而後設置它的listener->onTouchBegan屬性,其中CC_CALLBACK_2(HelloWorld::touchBegan, this)是使用CC_CALLBACK_2宏綁定回調函數,該函數是下面定義的bool HelloWorld::touchBegan(Touch*touch, Event* event)函數。

其它觸摸事件的階段也須要採用相似的代碼,這裏再也不贅述。

 

二、觸摸事件的空間方面

空間方面就是每一個觸摸點(Touch)對象包含了當前位置信息,以及以前的位置信息(若是有的話),下面的函數是能夠得到觸摸點以前的位置信息:

Point getPreviousLocationInView()                 //UI座標

Point getPreviousLocation()                            //OpenGL座標

下面的函數是能夠得到觸摸點當前的位置信息。

Point getLocationInView()                      //UI座標

Point getLocation()                                           //OpenGL座標

 

 

 

更多內容請關注Cocos2d-x系列圖書《Cocos2d-x實戰(卷Ⅰ):C++開發》

本書交流討論網站:http://www.cocoagame.net

歡迎加入cocos2d-x技術討論羣:25776038六、327403678

相關文章
相關標籤/搜索