IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
簡(jiǎn)介
游戲中會(huì)有各種各樣的處理用戶輸入的需求,例如當(dāng)玩家按下了某個(gè)按鍵則飛機(jī)會(huì)發(fā)射一顆子彈,三消游戲中拖動(dòng)屏幕中的方塊移動(dòng)會(huì)觸發(fā)與其邊上的方塊交換等。
那么在Cocos2d-x引擎中這部分功能是如何實(shí)現(xiàn)的呢?答案是通過(guò)事件分發(fā)機(jī)制響應(yīng)用戶事件,引擎不僅內(nèi)置了常見的事件如觸摸事件,鍵盤事件等,而且還提供了創(chuàng)建自定義事件的方法以滿足我們?cè)谟螒虻拈_發(fā)過(guò)程中特殊的事件響應(yīng)需求。今天就來(lái)為大家講解在Cocos2d-x引擎中如何使用事件分發(fā)機(jī)制來(lái)處理用戶的輸入。
事件相關(guān)基本概念
首先我們要搞清楚與事件相關(guān)的三個(gè)基本元素,它們分別為:
(1)事件監(jiān)聽器:負(fù)責(zé)接收事件,并執(zhí)行預(yù)定義的事件處理函數(shù)
(2)事件分發(fā)器:負(fù)責(zé)發(fā)起通知
(3)事件對(duì)象:記錄事件的相關(guān)信息
監(jiān)聽器的類型
監(jiān)聽器總共有5種類型,分別為:
(1)EventListenerTouch - 響應(yīng)觸摸事件
(2)EventListenerKeyboard - 響應(yīng)鍵盤事件
(3)EventListenerAcceleration - 響應(yīng)加速度事件
(4)EventListenMouse - 響應(yīng)鼠標(biāo)事件
(5)EventListenerCustom - 響應(yīng)自定義事件
接下來(lái)重點(diǎn)給大家介紹觸摸事件和鍵盤事件。
觸摸事件
觸摸事件是手機(jī)游戲中最重要的事件,它易于創(chuàng)建,還能提供多種多樣的功能。當(dāng)你觸摸移動(dòng)設(shè)備的屏幕時(shí),設(shè)備獲取到觸控位置,同時(shí)取得觸控的內(nèi)容,最后在程序中響應(yīng)這個(gè)過(guò)程,這就是觸摸事件流程處理?梢园凑找韵虏襟E進(jìn)行:
// 創(chuàng)建一個(gè)"one by one" 觸摸事件監(jiān)聽器(同時(shí)只能響應(yīng)單點(diǎn)觸摸)
auto listener1 = EventListenerTouchOneByOne::create();
// 給監(jiān)聽器追加響應(yīng)回調(diào)函數(shù)-開始觸摸
listener1->onTouchBegan = [](Touch* touch, Event* event){
//在這里處理核心業(yè)務(wù)邏輯
return true;
};
// 給監(jiān)聽器追加響應(yīng)回調(diào)函數(shù)-觸摸中移動(dòng)
listener1->onTouchMoved = [](Touch* touch, Event* event){
//核心業(yè)務(wù)代碼
};
// 給監(jiān)聽器追加響應(yīng)回調(diào)函數(shù)-結(jié)束觸摸
listener1->onTouchEnded = [=](Touch* touch, Event* event){
// 核心業(yè)務(wù)代碼
};
//添加監(jiān)聽器
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);
可以看到,在使用觸摸事件監(jiān)聽器時(shí),可以監(jiān)聽三種不同的事件,每一個(gè)事件都有自己觸發(fā)的時(shí)機(jī)。
三種事件及其觸發(fā)時(shí)機(jī):
(1)onTouchBegan 開始觸摸屏幕時(shí)
(2)onTouchMoved 觸摸屏幕,同時(shí)在屏幕上移動(dòng)時(shí)
(3)onTouchEnded 結(jié)束觸摸屏幕時(shí)
鍵盤事件
對(duì)于桌面游戲,一般需要通過(guò)鍵盤做一些游戲內(nèi)的控制,這時(shí)你就需要監(jiān)聽鍵盤事件。Cocos2d-x 支持鍵盤事件,就像上節(jié)介紹的觸摸事件一樣。
創(chuàng)建鍵盤事件監(jiān)聽器:
auto listener = EventListenerKeyboard::create();
//綁定按鍵按下事件與按鍵抬起事件
listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this);
listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this);
//添加監(jiān)聽器到事件派發(fā)器
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
// 按鍵按下回調(diào)函數(shù)
void KeyboardTest::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)
{
log("Key with keycode %d pressed", keyCode);
}
// 按鍵抬起回調(diào)函數(shù)
void KeyboardTest::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)
{
log("Key with keycode %d released", keyCode);
}
可以看到,在使用鍵盤事件監(jiān)聽器時(shí),可以監(jiān)聽兩種不同的事件,每一個(gè)事件都有自己的觸發(fā)時(shí)機(jī)。
兩種事件及觸發(fā)時(shí)機(jī):
onKeyPressed 按鍵被按下時(shí)
onKeyReleased 按下狀態(tài)的按鍵被放開時(shí)
>>本文地址:http://hqfphsz.com/zhuanye/2020/60457.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?