閱讀527 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Cocos2d-x中觸摸事件

理解一個觸摸事件可以從時間和空間兩方麵考慮。

1、觸摸事件的時間方麵

觸摸事件的在時間方麵如下圖所示可以有不同的“按下”、“移動”和“抬起”等階段表示觸摸是否剛剛開始、是否正在移動或處於靜止狀態以及何時結束也就是手指何時從屏幕抬起。此外觸摸事件的不同階段都可以有單點觸摸或多點觸摸是否支持多點觸摸還要看設備和平台。


 

觸摸事件有兩個事件監聽器EventListenerTouchOneByOne和EventListenerTouchAllAtOnce 分別對應單點觸摸和多點觸摸。這些監聽器有一些觸摸事件響應屬性這些屬性對應著觸摸事件不同階段。通過設置這些屬性能夠實現事件與事件處理者函數的關聯。

EventListenerTouchOneByOne中觸摸事件響應屬性

std::function<bool(Touch*,Event*)> onTouchBegan。當一個手指觸碰屏幕時回調該屬性所指定函數。如果函數返回值為true則可以回調後麵的兩個屬性onTouchMoved和onTouchEnded所指定的函數否則不回調。

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

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

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

 

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

EventListenerTouchAllAtOnce 中觸摸事件響應屬性

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。當多點觸摸事件被取消時回調該屬性所指定的函數。

 

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

auto listener =EventListenerTouchOneByOne::create();
listener->onTouchBegan =CC_CALLBACK_2(HelloWorld::touchBegan, this);
... ...
bool HelloWorld::touchBegan(Touch*touch, Event* event) {
    ......
    returnfalse;
}

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

其它觸摸事件的階段也需要采用類似的代碼這裏不再贅述。

 

2、觸摸事件的空間方麵

空間方麵就是每個觸摸點Touch對象包含了當前位置信息以及之前的位置信息如果有的話下麵的函數是可以獲得觸摸點之前的位置信息

Point getPreviousLocationInView()                 //UI坐標

Point getPreviousLocation()                            //OpenGL坐標

下麵的函數是可以獲得觸摸點當前的位置信息。

Point getLocationInView()                      //UI坐標

Point getLocation()                                           //OpenGL坐標



《Cocos2d-x實戰 C++卷》現已上線各大商店均已開售

京東https://item.jd.com/11584534.html

亞馬遜https://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

當當https://product.dangdang.com/23606265.html

互動出版網https://product.china-pub.com/3770734

《Cocos2d-x實戰 C++卷》源碼及樣章下載地址

源碼下載地址https://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

樣章下載地址https://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

歡迎關注智捷iOS課堂微信公共平台

最後更新:2017-04-03 05:39:30

  上一篇:go 【北大夏令營筆記-深度優先搜索】POJ1011-Sticks
  下一篇:go Linux內核剖析 之 內存尋址(二)