【新功能】“回调特性”的使用教程:

前端之家收集整理的这篇文章主要介绍了【新功能】“回调特性”的使用教程:前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1. 创建文件修改自定义名称 H 'WFORso[
点击根节点 eI/\I:G{f
@H_403_18@
>,] eL
Ovaj":L
(!XYH@Mz<w
i(&6ys5
属性栏中修改自定义类类名,如 @H_403_18@:MyClass l ))~&
@H_403_18@
;EE&~&*w
6*(h9!_T1
2. 加入UI控件,修改回调方法 RAD4q"}k
选中想要设置回调特性的控件,进入高级属性修改回调方法和对应回调的名称 ery?G-
如: @H_403_18@Touch 方法名称 @H_403_18@onTouch `aO@N(
@H_403_18@
(IoPU+1b
PtPGi^
然后发布资源 !7Yt`l$$z
3. C++中,创建一个自己的自定义类。 Zgy2Pot
这个类必须遵循如下要求: 5ykk11!p$
@H_403_18@a. 继承 @H_403_18@WidgetCallBackHandlerProtocol @H_403_18@Node( 或其他继承自 @H_403_18@Node 的类 @H_403_18@) ard3yNQt
@H_403_18@b. 重写如下接口: =7J|KoKK
@H_403_18@onLocateTouchCallback 764}yV>
@H_403_18@onLocateClickCallback MoKXl?B<
@H_403_18@onLocateEventCallback v8 '`gY
返回对 @H_403_18@Touch @H_403_18@Click @H_403_18@Event 三种事件的处理函数。(可以只重写你使用到的回调类型)。 "j.oR}s9?#
如: cmr6,3_
@H_403_18@//.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
@H_403_18@#ifndef __TestCpp__MyClass__
@H_403_18@#define __TestCpp__MyClass__
@H_403_18@#include "cocos2d.h"
@H_403_18@#include "cocostudio/CocoStudio.h"
@H_403_18@#include "cocostudio/WidgetCallBackHandlerProtocol.h"
@H_403_18@class MyClass:public cocos2d::Node,public cocostudio::WidgetCallBackHandlerProtocol
@H_403_18@{
@H_403_18@public:
@H_403_18@CREATE_FUNC(MyClass)
@H_403_18@ @H_403_18@ @H_403_18@MyClass();
@H_403_18@virtual ui::Widget::ccWidgetTouchCallback
@H_403_18@onLocateTouchCallback(const std::string&callBackName);
@H_403_18@ccWidgetClickCallback
@H_403_18@onLocateClickCallback(const ccWidgetEventCallback
@H_403_18@onLocateEventCallback(const void onTouch(Ref*sender,TouchEventType type);
@H_403_18@onClick(Ref*sender);
@H_403_18@onEvent(int eventType);
@H_403_18@private:
@H_403_18@vector<string>_touchTypes;
@H_403_18@string _click;
@H_403_18@ @H_403_18@string>_eventTypes;
@H_403_18@};
@H_403_18@//.cpp file 21/a3Mlx#
@H_403_18@#include "MyClass.h"
@H_403_18@
@H_403_18@#include "ui/UIText.h"
@H_403_18@
@H_403_18@USING_NS_CC;
@H_403_18@using namespace std;
@H_403_18@using namespace ui;
@H_403_18@
@H_403_18@MyClass::MyClass()
@H_403_18@{ @H_403_18@}
@H_403_18@
@H_403_18@ccWidgetTouchCallback MyClass::string&callBackName)
@H_403_18@{
@H_403_18@ @H_403_18@ @H_403_18@if(callBackName=="onTouch")//判断事件名,返回对应的函数。下同
@H_403_18@ {
@H_403_18@ return CC_CALLBACK_2(onTouch,this);
@H_403_18@ }
@H_403_18@
@H_403_18@ @H_403_18@ return nullptr;
@H_403_18@}
@H_403_18@
@H_403_18@ccWidgetClickCallback @H_403_18@if(callBackName=="onClick")
@H_403_18@ {
@H_403_18@CC_CALLBACK_1(onClick,138)"> @H_403_18@return nullptr;
@H_403_18@}
@H_403_18@
@H_403_18@ccWidgetEventCallback "onEvent")
@H_403_18@ {
@H_403_18@onEvent,this);
@H_403_18@ }
@H_403_18@ @H_403_18@return nullptr;
@H_403_18@}
@H_403_18@
@H_403_18@void Ref*object,133)">TouchEventType type)
@H_403_18@{
@H_403_18@ @H_403_18@CCLOG("onTouch");
@H_403_18@}
@H_403_18@
@H_403_18@void Ref*sender)
@H_403_18@{
@H_403_18@"onClick");
@H_403_18@}
@H_403_18@
@H_403_18@void int eventType)
@H_403_18@{
@H_403_18@"onEvent");
@H_403_18@}
^?^|Y?f2P?
4. 为第3步编写的类创建工厂类 H:{(CY?t
这个类必须继承 @H_403_18@cocostudio::NodeReader ,并重写如下三个接口 K}5 $;W#
@H_403_18@getInstance —— @H_403_18@ 返回工厂类的单例 t6L^ #\'
@H_403_18@purge —— @H_403_18@ 销毁工厂类 r/q1&*T
@H_403_18@createNodeWithFlatBuffers —— @H_403_18@ 创建第 @H_403_18@3 步编写的类,并调用 @H_403_18@setPropsWithFlatBuffers %dk$K!5D0
如: 1TxhEXB
@H_403_18@//.h file $OFFH[_z
@H_403_18@#ifndef __cocos2d_libs__MyClassReader__
@H_403_18@#define __cocos2d_libs__MyClassReader__
@H_403_18@#include "cocostudio/CocosStudioExport.h"
@H_403_18@#include "cocostudio/WidgetReader/NodeReader/NodeReader.h"
@H_403_18@
@H_403_18@class MyClassReader:public NodeReader
@H_403_18@{
@H_403_18@public:
@H_403_18@ @H_403_18@MyClassReader() {};
@H_403_18@ ~MyClassReader() {};
@H_403_18@
@H_403_18@ @H_403_18@static MyClassReader*getInstance();
@H_403_18@ @H_403_18@static void purge();
@H_403_18@
@H_403_18@Node*createNodeWithFlatBuffers(const flatbuffers::Table*nodeOptions);
@H_403_18@};
@H_403_18@#endif /*defined(__cocos2d_libs__MyClassReader__) */ 4qSS<SqY
@H_403_18@//.cpp file
@H_403_18@#include "MyClassReader.h"
@H_403_18@#include "MyClass.h"
@H_403_18@USING_NS_CC;
@H_403_18@static MyClassReader*_instanceMyClassReader=nullptr;
@H_403_18@
@H_403_18@MyClassReader*MyClassReader::getInstance()
@H_403_18@{
@H_403_18@ @H_403_18@if(!_instanceMyClassReader)
@H_403_18@ {
@H_403_18@ _instanceMyClassReader = new MyClassReader ();
@H_403_18@ }
@H_403_18@ @H_403_18@return _instanceMyClassReader;
@H_403_18@}
@H_403_18@void purge()
@H_403_18@{
@H_403_18@CC_SAFE_DELETE(_instanceMyClassReader);
@H_403_18@}
@H_403_18@Node*Table*nodeOptions)
@H_403_18@{
@H_403_18@ @H_403_18@MyClass*node=create();
@H_403_18@
@H_403_18@ @H_403_18@setPropsWithFlatBuffers(node,nodeOptions);
@H_403_18@
@H_403_18@ @H_403_18@return node;
} a+a%}76N
Mi/'4~0Y
5. 在加载节点之前注册这个接口到CSLoader %C E@}
@H_403_18@CSLoader*instance=CSLoader::getInstance();
@H_403_18@ instance -> registReaderObject ( " MyClassReader" , ( ObjectFactory :: Instance ) MyClassReader :: getInstance );
@H_403_18@注意第一个参数必须是第一步填写的自定义类名加“Reader ”如上述的"MyClassReader" n%ArA])_&
6. 使用CreateNode @H_403_18@加载你的节点。 1'U%7#;E
1\608~ZH
>'1Q"$;
Bzy=@]`
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!注意:!!! Mn\ B\
你的自定义类的create已经委托给工厂类,只要你注册工厂类的时候没写错,工厂类会在createNode里边create你的自定义类。g-V\ s&}
所以不需要你自己再create自定义类。
最终createNode返回的就是你的自定义类。 wPO@f~[Ji

猜你在找的Cocos2d-x相关文章