【新功能】“回调特性”的使用教程:
发布时间:2020-12-14 20:14:07 所属栏目:百科 来源:网络整理
导读:1. 创建文件,修改自定义类名称。 H 'WFORso[ 点击根节点 eI/I:G{f ,] eL Ovaj":L (!XYH@Mzw i(6ys5 在属性栏中修改自定义类类名,如 :MyClass l ))~ ;EE~*w 6*(h9!_T1 2. 加入 UI 控件 , 修改回调方法。 RAD4q"}k 选中想要设置回调特性的控件,进入高级属
1. 创建文件,修改自定义类名称。
H 'WFORso[
点击根节点 eI/I:G{f >,] eL Ovaj":L (!XYH@Mz<w i(&6ys5 在属性栏中修改自定义类类名,如 :MyClass l ))~& ;EE&~&*w 6*(h9!_T1 2. 加入UI控件,修改回调方法。 RAD4q"}k 选中想要设置回调特性的控件,进入高级属性,修改回调方法和对应回调的名称。 ery?G- 如: Touch 方法,名称为 onTouch `aO@N( (IoPU+1b PtPGi^ 然后发布资源 !7Yt`l$$z 3. 在C++中,创建一个自己的自定义类。 Zgy2Pot 这个类必须遵循如下要求: 5ykk11!p$ a. 继承 WidgetCallBackHandlerProtocol 和 Node( 或其他继承自 Node 的类 ) ard3yNQt b. 重写如下接口: =7J|KoKK onLocateTouchCallback 764}yV> onLocateClickCallback MoKXl?B< onLocateEventCallback v8 '`gY 返回对 Touch 、 Click 、 Event 三种事件的处理函数。(可以只重写你使用到的回调类型)。 "j.oR}s9?# 如: cmr6,3_ //.h file 0ez i?Um {>UMw>T[ :m)Rmwn_ ^qId]s nuQ Lq^e GmmT'3Q FSYjp{z5 c~pUhx1( Wf`Oye Rz #*>7X>,J
#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 ui::Widget::ccWidgetTouchCallback
onLocateTouchCallback(const std::string&callBackName);
ccWidgetClickCallback
onLocateClickCallback(const ccWidgetEventCallback
onLocateEventCallback(const void onTouch(Ref*sender,TouchEventType type);
onClick(Ref*sender);
onEvent(int eventType);
private:
vector<string>_touchTypes;
string _click;
string>_eventTypes;
};
//.cpp file 21/a3Mlx#
#include "MyClass.h"
#include "ui/UIText.h"
USING_NS_CC;
using namespace std;
using namespace ui;
MyClass::MyClass()
{
}
ccWidgetTouchCallback MyClass::string&callBackName)
{
if(callBackName=="onTouch")//判断事件名,返回对应的函数。下同
{
return CC_CALLBACK_2(onTouch,this);
}
return nullptr;
}
ccWidgetClickCallback
if(callBackName=="onClick")
{
CC_CALLBACK_1(onClick,138)">
return nullptr;
}
ccWidgetEventCallback "onEvent")
{
onEvent,this);
}
return nullptr;
}
void Ref*object,133)">TouchEventType type)
{
CCLOG("onTouch");
}
void Ref*sender)
{
"onClick");
}
void int eventType)
{
"onEvent");
}
^?^|Y?f2P?
4. 为第3步编写的类创建工厂类 H:{(CY?t 这个类必须继承 cocostudio::NodeReader ,并重写如下三个接口 K}5 $;W# getInstance —— 返回工厂类的单例 t6L^ #' purge —— 销毁工厂类 r/q1&*T createNodeWithFlatBuffers —— 创建第 3 步编写的类,并调用 setPropsWithFlatBuffers %dk$K!5D0 如: 1TxhEXB //.h file $OFFH[_z
#ifndef __cocos2d_libs__MyClassReader__
#define __cocos2d_libs__MyClassReader__
#include "cocostudio/CocosStudioExport.h"
#include "cocostudio/WidgetReader/NodeReader/NodeReader.h"
class MyClassReader:public NodeReader
{
public:
MyClassReader() {};
~MyClassReader() {};
static MyClassReader*getInstance();
static void purge();
Node*createNodeWithFlatBuffers(const flatbuffers::Table*nodeOptions);
};
#endif /*defined(__cocos2d_libs__MyClassReader__) */ 4qSS<SqY
//.cpp file
#include "MyClassReader.h"
#include "MyClass.h"
USING_NS_CC;
static MyClassReader*_instanceMyClassReader=nullptr;
MyClassReader*MyClassReader::getInstance()
{
if(!_instanceMyClassReader)
{
_instanceMyClassReader
=
new
MyClassReader
();
}
return _instanceMyClassReader;
}
void purge()
{
CC_SAFE_DELETE(_instanceMyClassReader);
}
Node*Table*nodeOptions)
{
MyClass*node=create();
setPropsWithFlatBuffers(node,nodeOptions);
return node;
}
a+a%}76N
Mi/'4~0Y 5. 在加载节点之前注册这个接口到CSLoader中 %C E@}
CSLoader*instance=CSLoader::getInstance();
instance
->
registReaderObject
(
"
MyClassReader"
,
(
ObjectFactory
::
Instance
)
MyClassReader
::
getInstance
);
注意第一个参数必须是第一步填写的自定义类名加“Reader ”如上述的"MyClassReader" n%ArA])_& 6. 使用CreateNode 加载你的节点。 1'U%7#;E 1608~ZH >'1Q"$; Bzy=@]` !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!注意:!!! Mn B 你的自定义类的create已经委托给工厂类,只要你注册工厂类的时候没写错,工厂类会在createNode里边create你的自定义类。g-V s&} 所以不需要你自己再create自定义类。 最终createNode返回的就是你的自定义类。 wPO@f~[Ji (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |