【教程】“回撥特性”的使用教程(C++語言)
(原文:http://www.cocoachina.com/bbs/read.php?tid-274210.html)
【新功能】“回撥特性”的使用教程:
簡介:Cocos Studio2.0.5版本新增回撥特性功能。
現在可以直接在編輯器裡邊指定某個控制元件的事件的處理函式。
不再需要一個一個去get控制元件啦。也不再需要因為修改了控制元件名或者其他屬性後,就得去改程式啦。
這些,都可以交給策劃了。
ok,以下是正文
1. 建立檔案,修改自定義類名稱。
點選根節點
在屬性欄中修改自定義類類名,如:MyClass
2. 加入UI控制元件, 修改回撥方法。
選中想要設定回撥特性的控制元件,進入高階屬性,修改回撥方法和對應回撥的名稱。
如:Touch方法,名稱為onTouch
然後釋出資源
3. 在C++中,建立一個自己的自定義類。
這個類必須遵循如下要求:
a.繼承WidgetCallBackHandlerProtocol和 Node(或其他繼承自Node的類)
b.重寫如下介面:
onLocateTouchCallback
onLocateClickCallback
onLocateEventCallback
返回對Touch、Click、Event三種事件的處理函式。(可以只重寫你使用到的回撥型別)。
如:
//.h file
#ifndef __TestCpp__MyClass__
#define __TestCpp__MyClass__
#include "cocos2d.h"
#include "cocostudio/CocoStudio.h"
#include "cocostudio/WidgetCallBackHandlerProtocol.h"
class MyClass : public cocos2d::Node, public cocostudio::WidgetCallBackHandlerProtocol
{
public:
CREATE_FUNC(MyClass)
MyClass();
virtual cocos2d::ui::Widget::ccWidgetTouchCallback
onLocateTouchCallback(const std::string &callBackName);
virtual cocos2d::ui::Widget::ccWidgetClickCallback
onLocateClickCallback(const std::string &callBackName);
virtual cocos2d::ui::Widget::ccWidgetEventCallback
onLocateEventCallback(const std::string &callBackName);
void onTouch(cocos2d::Ref* sender, cocos2d::ui::Widget::TouchEventType type);
void onClick(cocos2d::Ref* sender);
void onEvent(cocos2d::Ref* sender, int eventType);
private:
std::vector<std::string> _touchTypes;
std::string _click;
std::vector<std::string> _eventTypes;
};
//.cpp file
#include "MyClass.h"
#include "ui/UIText.h"
USING_NS_CC;
using namespace std;
using namespace cocos2d::ui;
MyClass::MyClass()
{}
Widget::ccWidgetTouchCallback MyClass::onLocateTouchCallback(const string &callBackName)
{
if (callBackName == "onTouch")//判斷事件名,返回對應的函式。下同
{
return CC_CALLBACK_2(MyClass::onTouch, this);
}
return nullptr;
}
Widget::ccWidgetClickCallback MyClass::onLocateClickCallback(const string &callBackName)
{
if (callBackName == "onClick")
{
return CC_CALLBACK_1(MyClass::onClick, this);
}
return nullptr;
}
Widget::ccWidgetEventCallback MyClass::onLocateEventCallback(const string &callBackName)
{
if (callBackName == "onEvent")
{
return CC_CALLBACK_2(MyClass::onEvent, this);
}
return nullptr;
}
void MyClass::onTouch(cocos2d::Ref* object, cocos2d::ui::Widget::TouchEventType type)
{
CCLOG("onTouch");
}
void MyClass::onClick(cocos2d::Ref* sender)
{
CCLOG("onClick");
}
void MyClass::onEvent(cocos2d::Ref* sender, int eventType)
{
CCLOG("onEvent");
}
4. 為第3步編寫的類建立工廠類
這個類必須繼承cocostudio::NodeReader,並重寫如下三個介面
getInstance —— 返回工廠類的單例
purge —— 銷燬工廠類
createNodeWithFlatBuffers —— 建立第3步編寫的類,並呼叫setPropsWithFlatBuffers
如:
//.h file
5. 在載入節點之前註冊這個介面到CSLoader中
6. 使用CreateNode載入你的節點。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意:!!!
你的自定義類的create已經委託給工廠類,只要你註冊工廠類的時候沒寫錯,工廠類會在createNode裡邊create你的自定義類。
所以不需要你自己再create自定義類。最終createNode返回的就是你的自定義類。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#ifndef
__TestCpp__MyClass__ #define
__TestCpp__MyClass__ #include
"cocos2d.h" #include
"cocostudio/CocoStudio.h" #include
"cocostudio/WidgetCallBackHandlerProtocol.h" class
MyClass : public
cocos2d::Node, public
cocostudio::WidgetCallBackHandlerProtocol { public : CREATE_FUNC(MyClass) MyClass(); virtual
cocos2d::ui::Widget::ccWidgetTouchCallback onLocateTouchCallback( const
std::string &callBackName); virtual
cocos2d::ui::Widget::ccWidgetClickCallback onLocateClickCallback( const
std::string &callBackName); virtual
cocos2d::ui::Widget::ccWidgetEventCallback onLocateEventCallback( const
std::string &callBackName); void
onTouch(cocos2d::Ref* sender, cocos2d::ui::Widget::TouchEventType type); void
onClick(cocos2d::Ref* sender); void
onEvent(cocos2d::Ref* sender, int
eventType); private : std::vector<std::string>
_touchTypes; std::string
_click; std::vector<std::string>
_eventTypes; }; //.cpp
file #include
"MyClass.h" #include
"ui/UIText.h" USING_NS_CC; using
namespace
std; using
namespace
cocos2d::ui; MyClass::MyClass() {} Widget::ccWidgetTouchCallback
MyClass::onLocateTouchCallback( const
string &callBackName) { if
(callBackName == "onTouch" ) //判斷事件名,返回對應的函式。下同 { return
CC_CALLBACK_2(MyClass::onTouch, this ); } return
nullptr ; } Widget::ccWidgetClickCallback
MyClass::onLocateClickCallback( const
string &callBackName) { if
(callBackName == "onClick" ) { return
CC_CALLBACK_1(MyClass::onClick, this ); } return
nullptr ; } Widget::ccWidgetEventCallback
MyClass::onLocateEventCallback( const
string &callBackName) { if
(callBackName == "onEvent" ) { return
CC_CALLBACK_2(MyClass::onEvent, this ); } return
nullptr ; } void
MyClass::onTouch(cocos2d::Ref* object, cocos2d::ui::Widget::TouchEventType type) { CCLOG( "onTouch" ); } void
MyClass::onClick(cocos2d::Ref* sender) { CCLOG( "onClick" ); } void
MyClass::onEvent(cocos2d::Ref* sender, int
eventType) { CCLOG( "onEvent" ); } |
相關文章
- C語言 非同步回撥C語言非同步
- C++回撥函式(callback)的使用C++函式
- C++回撥C++
- C 語言回撥函式詳解函式
- Javascript回撥非同步操作示例教程JavaScript非同步
- C語言回撥日誌庫的實現C語言
- C++ 語言特性的效能分析C++
- 函式回撥(C++)函式C++
- C語言函式指標與回撥函式使用方法C語言函式指標
- C++中的回撥函式C++函式
- PHP的Ev教程二(watcher和watche回撥等)PHP
- R語言的入門教程R語言
- C++語言的15個晦澀特性C++
- C++屌屌的觀察者模式-同步回撥和非同步回撥C++模式非同步
- C++回撥函式 用法C++函式
- c++回撥函式(下)C++函式
- C++回撥函式示例C++函式
- c++語言教程——01 c++的簡介C++
- C語言 Make命令教程C語言
- DPC++中的現代C++語言特性C++
- C語言函式指標與回撥用函式C語言函式指標
- 細數 C++ 那些比起 C語言 更爽的特性C++C語言
- C語言精品影片教程大全C語言
- go語言快速入門教程Go
- Prolog 語言入門教程
- 組合語言入門教程組合語言
- Swift 程式語言入門教程Swift
- SQL語言基本教程(一) (轉)SQL
- C語言關於回撥函式和this指標探討C語言函式指標
- 【微信小程式】退款功能教程(含申請退款和退款回撥)微信小程式
- 在C++中使用libuv時對回撥的處理 (2)C++
- 通過c++示例解釋回撥C++
- C語言教程——03 C語言結構C語言
- Go 語言入門教程:變數Go變數
- 《C 語言入門教程》釋出了
- plsq安裝教程及語言更改
- Flutter教程(二) 瞭解Dart語言FlutterDart
- 函數語言程式設計 - 玩轉高階回撥函式函數程式設計函式