Cocos2d-x3.5下“回调特性”的一种简单的实现方法

移动开发 Android 游戏开发
Cocos2d-x3.5已经发布了一小段时间了,细心的同学会发现这个版本增加了一个加载cocos资源的重载版本:Node* CSLoader::createNode(const std::string &filename, const ccNodeLoadCallback &callback)

Cocos2d-x3.5已经发布了一小段时间了,细心的同学会发现这个版本增加了一个加载cocos资源的重载版本:

Node* CSLoader::createNode(const std::string &filename, const ccNodeLoadCallback &callback)

相比另一个版本,这个多了一个回调函数的参数。

框架用这个东西干了什么?

通过阅读源码可以知道,在加载完一个节点后,框架会将节点简单地回调给这个函数(除根节点外)。这样,利用这个参数,我们可以在加载资源的过程中对正在加载的节点做一些修饰处理。

这篇文章就来讲讲,怎么用这个东西来十分简便地实现此前那个有点复杂的功能:回调特性。

正文:

首先利用上边的功能,我们可以在加载时得到各个节点对象,其次我们需要获取Cocos中填写的参数。

具体是怎么获取呢?

先在CSLoader的源码找找关于回调特性的原有实现:

Widget* widget = dynamic_cast

if (widget)

{

std::string callbackName = widget->getCallbackName();

std::string callbackType = widget->getCallbackType();

bindCallback(callbackName, callbackType, widget, _rootNode);

}

以上这段代码是在CSLoader::createNode加载Widget类型节点时,针对回调特性的一些特殊处理。就是将我们在Cocos中填写的两个回调特性的字段取出来,联通widget,_rootNode传给bindCallback进行绑定。

上边的两个函数:getCallbackName,getCallbackType,取出来的就是我们在Cocos中所填写的回调参数信息。

至此填了回调特性的节点及对应的参数我们都有了。

接下来,如何实现呢?

我们可以考虑跟上述类似的做法:

CSLoader::createNode(root_path,[this](Node *node){//node既是当前加载出来的节点

Widget* widget = dynamic_cast

if (widget){

//获取回调特性相关属性的信息。

std::string callbackName = widget->getCallbackName();

std::string callbackType = widget->getCallbackType();

//根据上述信息进行绑定。

this.bindCallback(callbackName, callbackType, widget);

}

});

然后在当前类实现一个bindCallback函数,用callbackName和callbackType进行一些字符串比对操作,找到一个合适的函数,丢给widget做监听,比如:

void MyScene::bindCallback(const std::string &callbackName,const std::string &callbackType,widget){

if(callbackName == “animal1” && callbackType == “Click”){//假定有一个playAnimal1的接口

widget->addClickEventListener(CC_CALLBACK_2(MyScene::playAnimal1,this));//

}

else if(callbackName == “animal2” && callbackType == “Click”){//假定有一个playAnimal2的接口

widget->addClickEventListener(CC_CALLBACK_2(MyScene::playAnimal2,this));

}

……

}

后记:

1.目前为止Cocos2d-x的两大脚本引擎都没有提供对回调特性的支持,包括新重载的createNode函数,也是没有导出给两个脚本引擎使用。

但getCallbackName、getCallbackType这两个函数都是有导出的,我们可以自行遍历加载出来的根节点,利用这两个函数来获取Cocos中填写的回调特性相关信息,根据这些信息,自己进行绑定。

2.Cocos2.2开始提供了一个“用户数据”的接口,这个接口所设置的数据可以通过Cocos2d::Node::getUserData获取,配合这个东西具体能干什么,就看你的想象力了。

责任编辑:老门
相关推荐

2011-12-12 10:40:08

Cocos2d-X游戏开发开发环境

2010-03-26 13:34:47

CentOS安装

2012-04-17 13:12:00

2012-04-16 15:20:41

cocos2d-x

2013-05-22 15:49:46

2013-12-03 10:58:50

Cocos2D-X砖块地图

2013-06-07 14:06:52

移动开发Android开发cocos2d-x

2012-04-17 12:44:38

cocos2d-x

2012-04-17 12:52:01

cocos2d-x

2012-04-17 12:38:46

cocos2d-x

2011-07-04 10:17:38

JDBC

2012-02-19 20:10:23

Cocos2d-x fCocos2dWindows Pho

2023-07-18 07:23:11

方案payloadrequest

2012-04-17 10:06:08

cocos2d-x

2012-04-17 10:59:31

cocos2d-x

2013-04-16 10:02:47

cocos2d-x懒人Android开发

2017-02-20 09:00:49

2011-03-02 10:01:15

2012-04-19 10:03:12

Cocos2d-x

2011-04-06 10:09:56

MySQL数据库安装
点赞
收藏

51CTO技术栈公众号