400-650-7353

精品課程

您所在的位置:首頁 > IT干貨資料 > unity > 【Unity基礎知識】Cocos2d-x事件機制

【Unity基礎知識】Cocos2d-x事件機制

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

簡介

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

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

事件相關基本概念

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

(1)事件監聽器:負責接收事件,并執行預定義的事件處理函數

(2)事件分發器:負責發起通知

(3)事件對象:記錄事件的相關信息

監聽器的類型

監聽器總共有5種類型,分別為:

(1)EventListenerTouch - 響應觸摸事件

(2)EventListenerKeyboard - 響應鍵盤事件

(3)EventListenerAcceleration - 響應加速度事件

(4)EventListenMouse - 響應鼠標事件

(5)EventListenerCustom - 響應自定義事件

【Unity基礎知識】Cocos2d-x事件機制

接下來重點給大家介紹觸摸事件和鍵盤事件。

觸摸事件

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

// 創建一個"one by one" 觸摸事件監聽器(同時只能響應單點觸摸)

auto listener1 = EventListenerTouchOneByOne::create();

// 給監聽器追加響應回調函數-開始觸摸

listener1->onTouchBegan = [](Touch* touch, Event* event){

//在這里處理核心業務邏輯

return true;

};

// 給監聽器追加響應回調函數-觸摸中移動

listener1->onTouchMoved = [](Touch* touch, Event* event){

//核心業務代碼

};

// 給監聽器追加響應回調函數-結束觸摸

listener1->onTouchEnded = [=](Touch* touch, Event* event){

// 核心業務代碼

};

//添加監聽器

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, this);

可以看到,在使用觸摸事件監聽器時,可以監聽三種不同的事件,每一個事件都有自己觸發的時機。

三種事件及其觸發時機:

(1)onTouchBegan 開始觸摸屏幕時

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

(3)onTouchEnded 結束觸摸屏幕時

鍵盤事件

對于桌面游戲,一般需要通過鍵盤做一些游戲內的控制,這時你就需要監聽鍵盤事件。Cocos2d-x 支持鍵盤事件,就像上節介紹的觸摸事件一樣。

創建鍵盤事件監聽器:

auto listener = EventListenerKeyboard::create();

//綁定按鍵按下事件與按鍵抬起事件

listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this);

listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this);

//添加監聽器到事件派發器

_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

// 按鍵按下回調函數

void KeyboardTest::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event)

{

log("Key with keycode %d pressed", keyCode);

}

// 按鍵抬起回調函數

void KeyboardTest::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event)

{

log("Key with keycode %d released", keyCode);

}

可以看到,在使用鍵盤事件監聽器時,可以監聽兩種不同的事件,每一個事件都有自己的觸發時機。

兩種事件及觸發時機:

onKeyPressed 按鍵被按下時

onKeyReleased 按下狀態的按鍵被放開時

學習疑問申請解答
您的姓名
您的電話
意向課程
 

中公優就業

IT小助手

掃描上方二維碼添加好友,請備注:599,享學習福利。

>>本文地址:
注:本站稿件未經許可不得轉載,轉載請保留出處及源文件地址。

推薦閱讀

優就業:ujiuye

關注中公優就業官方微信

  • 關注微信回復關鍵詞“大禮包”,享學習福利
QQ交流群
在線疑問解答
(加群備注“網站”)
IT培訓交流群 加入群聊 +
軟件測試 加入群聊 +
全鏈路UI/UE設計 加入群聊 +
Python+人工智能 加入群聊 +
互聯網營銷 加入群聊 +
Java開發 加入群聊 +
PHP開發 加入群聊 +
VR/AR游戲開發 加入群聊 +
大前端 加入群聊 +
大數據 加入群聊 +
Linux云計算 加入群聊 +
優就業官方微信
掃碼回復關鍵詞“大禮包”
享學習福利

測一測
你適合學哪門IT技術?

1 您的年齡

2 您的學歷

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

獲取測試結果
 
課程資料、活動優惠 領取通道
 
 
特级欧美AA毛片免费观看,A级毛片高清免费视频就,免费观看性欧美大片毛片_首页