cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例

本文主要是介绍cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自:http://xiandanboke.com.cn/cocos2d-xcccallfunc.html

CCCallFunc CCCallFuncN CCCallFuncND的区别和使用

CCCallFunc CCCallFuncN CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数

CCCallFunc

CCCallFunc是执行对应的回调函数,其中回调函数不可带参数。一般使用静态成员函数create创建实例,create声明如下:

static CCCallFunc* create	(	CCObject * 	pSelectorTarget,
SEL_CallFunc 	selector
)

回调函数通过execute方法执行,CCCallFunc中的execute的实现如下:

void CCCallFunc::execute() {if (m_pCallFunc) {(m_pSelectorTarget->*m_pCallFunc)();}if (m_nScriptHandler) {CCScriptEngineManager::sharedManager()->getScriptEngine()->executeCallFuncActionEvent(this);}
}

通过(m_pSelectorTarget->*m_pCallFunc)();可以看到回调函数不包含参数

CCCallFuncN

CCCallFuncN也是执行对应的回调函数,其中回调函数带一个参数。一般使用静态成员函数create创建实例,create声明如下:

static CCCallFuncN* create	(	CCObject * 	pSelectorTarget,
SEL_CallFuncN 	selector
)

回调函数通过execute方法执行,CCCallFuncN中的execute的实现如下:

void CCCallFuncN::execute() {if (m_pCallFuncN) {(m_pSelectorTarget->*m_pCallFuncN)(m_pTarget);}if (m_nScriptHandler) {CCScriptEngineManager::sharedManager()->getScriptEngine()->executeCallFuncActionEvent(this, m_pTarget);}
}

通过(m_pSelectorTarget->*m_pCallFuncN)(m_pTarget);可以看到回调函数包含一个参数。

CCCallFuncND

CCCallFuncND也是执行对应的回调函数,其中回调函数可带两个参数。一般使用静态成员函数create创建实例,create声明如下:

static CCCallFuncND* create	(	CCObject * 	pSelectorTarget,
SEL_CallFuncND 	selector,
void * 	d
)

回调函数通过execute方法执行,CCCallFuncND中的execute的实现如下:

void CCCallFuncND::execute() {if (m_pCallFuncND) {(m_pSelectorTarget->*m_pCallFuncND)(m_pTarget, m_pData);}
}

通过(m_pSelectorTarget->*m_pCallFuncND)(m_pTarget, m_pData);可以看到回调函数包含两个参数。

CCCallFunc CCCallFuncN CCCallFuncND实例对比

testCallFunc.h中代码
class testCallFunc : public CCLayer
{
protected:CCSprite*    sprite1;CCSprite*    sprite2;CCSprite*    sprite3;
public:virtual void onEnter();void callback1();void callback2(CCNode* sender);void callback3(CCNode* sender, void* data);
};testCallFunc.cpp中代码void testCallFunc::onEnter()
{//CCCallFunc的使用CCFiniteTimeAction*  action = CCSequence::create(CCMoveBy::create(2, ccp(200,0)),CCCallFunc::create(this, callfunc_selector(testCallFunc::callback1)),NULL);//CCCallFuncN的使用CCFiniteTimeAction*  action2 = CCSequence::create(CCScaleBy::create(2 ,  2),CCFadeOut::create(2),CCCallFuncN::create(this, callfuncN_selector(testCallFunc::callback2)),NULL);//CCCallFuncNC的使用CCFiniteTimeAction*  action3 = CCSequence::create(CCRotateBy::create(3 , 360),CCFadeOut::create(2),CCCallFuncND::create(this, callfuncND_selector(testCallFunc::callback3), (void*)0xbebabeba),NULL);sprite1->runAction(action);sprite2->runAction(action2);sprite3->runAction(action3);
}void testCallFunc::callback1()
{CCSize s = CCDirector::sharedDirector()->getWinSize();CCLabelTTF *label = CCLabelTTF::create("callback 1 called", "Marker Felt", 16);label->setPosition(ccp( s.width/4*1,s.height/2));addChild(label);
}void testCallFunc::callback2(CCNode* pSender)
{CCSize s = CCDirector::sharedDirector()->getWinSize();CCLabelTTF *label = CCLabelTTF::create("callback 2 called", "Marker Felt", 16);label->setPosition(ccp( s.width/4*2,s.height/2));addChild(label);
}void testCallFunc::callback3(CCNode* pTarget, void* data)
{CCSize s = CCDirector::sharedDirector()->getWinSize();CCLabelTTF *label = CCLabelTTF::create("callback 3 called", "Marker Felt", 16);label->setPosition(ccp( s.width/4*3,s.height/2));addChild(label);
}

这篇关于cocos2d-x中CCCallFunc CCCallFuncN CCCallFuncND的区别和使用示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/962760

相关文章

MySQL慢查询工具的使用小结

《MySQL慢查询工具的使用小结》使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询,本文就来介绍一下MySQL的慢查询工具,具有一定的参考价值,感兴趣的可以了解一下... 目录一、启用慢查询日志1.1 编辑mysql配置文件1.2 重启MySQL服务二、配置动态参数(可选)三、分析慢查

MYSQL中information_schema的使用

《MYSQL中information_schema的使用》information_schema是MySQL中的一个虚拟数据库,用于提供关于MySQL服务器及其数据库的元数,这些元数据包括数据库名称、表... 目录关键要点什么是information_schema?主要功能使用示例mysql 中informa

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用

MySQL ORDER BY 语句常见用法、示例详解

《MySQLORDERBY语句常见用法、示例详解》ORDERBY是结构化查询语言(SQL)中的关键字,隶属于SELECT语句的子句结构,用于对查询结果集按指定列进行排序,本文给大家介绍MySQL... 目录mysql ORDER BY 语句详细说明1.基本语法2.排序方向详解3.多列排序4.常见用法示例5.

SpringBoot集成Shiro+JWT(Hutool)完整代码示例

《SpringBoot集成Shiro+JWT(Hutool)完整代码示例》ApacheShiro是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,在现代应用开发中,Shiro因... 目录一、背景介绍1.1 为什么使用Shiro?1.2 为什么需要双Token?二、技术栈组成三、环境

gorm乐观锁使用小结

《gorm乐观锁使用小结》本文主要介绍了gorm乐观锁使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言grom乐观锁机制gorm乐观锁依赖安装gorm乐观锁使用创建一个user表插入数据版本号更新总结前言乐观锁,顾名

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配