网站首页 > 开源技术 正文
Cocos2d-x3.5已经发布了一小段时间了,细心的同学会发现这个版本增加了一个加载cocos资源的重载版本:
Node* CSLoader::createNode(const std::string &filename, const ccNodeLoadCallback &callback)
相比另一个版本,这个多了一个回调函数的参数。
框架用这个东西干了什么?
通过阅读源码可以知道,在加载完一个节点后,框架会将节点简单地回调给这个函数(除根节点外)。这样,利用这个参数,我们可以在加载资源的过程中对正在加载的节点做一些修饰处理。
这篇文章就来讲讲,怎么用这个东西来十分简便地实现此前那个有点复杂的功能:回调特性。
正文:
首先利用上边的功能,我们可以在加载时得到各个节点对象,其次我们需要获取Cocos中填写的参数。
具体是怎么获取呢?
先在CSLoader的源码找找关于回调特性的原有实现:
Widget* widget = dynamic_cast<Widget*>(node);
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<Widget*>(node);//尝试将节点转化为widget类型
if (widget){
//获取回调特性相关属性的信息。
//根据上述信息进行绑定。
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获取,配合这个东西具体能干什么,就看你的想象力了。
猜你喜欢
- 2024-09-10 高手在哪里?Cocos2d-x的Scheduler问题求解
- 2024-09-10 CocosCreator学习 碰撞系统(cocoscreator spine)
- 2024-09-10 Cocos2d-x项目实践一FlappyBird-屏幕适配
- 2024-09-10 愤怒的小鸟团队筹资4000万美元开发区块链游戏
- 2024-09-10 Cocos2d-x里面如何实现MVC(五)(cocos2d怎么用)
- 2024-09-10 基于Cocos2d跨平台单机麻将-源码(cocos creator 麻将)
- 2024-09-10 XcodeGhost波及游戏引擎?cocos 2d-x发声明
- 2024-09-10 Cocos2d-x项目实践一FlappyBird-游戏逻辑
- 2024-09-10 深度干货|Cocos2d-x v3.11在HTML5方向的优化
- 2024-09-10 Win10/Win8.1/WP8.1游戏可用Cocos2d-X创建
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)