400-650-7353
您所在的位置:首頁 > IT干貨資料 > unity > 【Unity基礎(chǔ)知識】Cocos2d-x事件機(jī)制

【Unity基礎(chǔ)知識】Cocos2d-x事件機(jī)制

  • 來源:Unity干貨資料
  • 2020-11-11 14:59:52
  • 閱讀()
  • 分享
  • 手機(jī)端入口

簡介

游戲中會有各種各樣的處理用戶輸入的需求,例如當(dāng)玩家按下了某個按鍵則飛機(jī)會發(fā)射一顆子彈,三消游戲中拖動屏幕中的方塊移動會觸發(fā)與其邊上的方塊交換等。

那么在Cocos2d-x引擎中這部分功能是如何實(shí)現(xiàn)的呢?答案是通過事件分發(fā)機(jī)制響應(yīng)用戶事件,引擎不僅內(nèi)置了常見的事件如觸摸事件,鍵盤事件等,而且還提供了創(chuàng)建自定義事件的方法以滿足我們在游戲的開發(fā)過程中特殊的事件響應(yīng)需求。今天就來為大家講解在Cocos2d-x引擎中如何使用事件分發(fā)機(jī)制來處理用戶的輸入。

事件相關(guān)基本概念

首先我們要搞清楚與事件相關(guān)的三個基本元素,它們分別為:

(1)事件監(jiān)聽器:負(fù)責(zé)接收事件,并執(zhí)行預(yù)定義的事件處理函數(shù)

(2)事件分發(fā)器:負(fù)責(zé)發(fā)起通知

(3)事件對象:記錄事件的相關(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)自定義事件

【Unity基礎(chǔ)知識】Cocos2d-x事件機(jī)制

接下來重點(diǎn)給大家介紹觸摸事件和鍵盤事件。

觸摸事件

觸摸事件是手機(jī)游戲中最重要的事件,它易于創(chuàng)建,還能提供多種多樣的功能。當(dāng)你觸摸移動設(shè)備的屏幕時,設(shè)備獲取到觸控位置,同時取得觸控的內(nèi)容,最后在程序中響應(yīng)這個過程,這就是觸摸事件流程處理。可以按照以下步驟進(jìn)行:

// 創(chuàng)建一個"one by one" 觸摸事件監(jiān)聽器(同時只能響應(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ù)-觸摸中移動

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)聽器時,可以監(jiān)聽三種不同的事件,每一個事件都有自己觸發(fā)的時機(jī)。

三種事件及其觸發(fā)時機(jī):

(1)onTouchBegan 開始觸摸屏幕時

(2)onTouchMoved 觸摸屏幕,同時在屏幕上移動時

(3)onTouchEnded 結(jié)束觸摸屏幕時

鍵盤事件

對于桌面游戲,一般需要通過鍵盤做一些游戲內(nèi)的控制,這時你就需要監(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)聽器時,可以監(jiān)聽兩種不同的事件,每一個事件都有自己的觸發(fā)時機(jī)。

兩種事件及觸發(fā)時機(jī):

onKeyPressed 按鍵被按下時

onKeyReleased 按下狀態(tài)的按鍵被放開時

文章“【Unity基礎(chǔ)知識】Cocos2d-x事件機(jī)制”已幫助

>>本文地址:http://m.littlerockbway.com/zhuanye/2020/60457.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營全域電商運(yùn)營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁設(shè)計(jì)網(wǎng)頁設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開發(fā)智能機(jī)器人
 

快速通道fast track

近期開班時間TIME