点击根节点 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/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)
{
{
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/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
1\608~ZH
>'1Q"$;
Bzy=@]`
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!注意:!!! Mn\ B\
你的自定义类的create已经委托给工厂类,只要你注册工厂类的时候没写错,工厂类会在createNode里边create你的自定义类。g-V\ s&}
所以不需要你自己再create自定义类。 最终createNode返回的就是你的自定义类。 wPO@f~[Ji 原文链接:https://www.f2er.com/cocos2dx/344620.html