如何在cocos2d-x中回调函数-创新互联

这篇文章给大家分享的是在cocos2d-x中回调函数的方法,相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。

创新互联是专业的榕城网站建设公司,榕城接单;提供成都网站制作、成都网站设计、外贸营销网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行榕城网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

代码一

  1. // callback.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. class
  5. typedefvoid//定义一个CCObject不带任何实参的函数指针SEL_CallFunc
  6. #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)//仅仅是一个宏
  7. class
  8. public
  9. void
  10. void
  11. "test->func"
  12. intint
  13. //创建一个Test对象,暂时没用到
  14. new
  15. //声明定义了一个类型为SEL_CallFunc的函数指针f,然后用f指针指向Test::func函数
  16. //上面一句替换宏后等价于SEL_CallFunc f = SEL_CallFunc)(&Test::func);
  17. //创建一个CCObject对象
  18. new
  19. //调用执行Test::func函数
  20. delete
  21. delete
  22. return

运行结果:

如何在cocos2d-x中回调函数

结果分析:

1.我们有一个CCObject类

2.我们可以通过这种方法typedef void (CCObject::*SEL_CallFunc)();来定义一个CCObject类的函数指针类型 SEL_CallFunc

3.我们定义了一个SEL_CallFunc的指针变量f

4.假定我们有一个类Test,里面有个函数func(),它的返回值和实参都与SEL_CallFunc一致,那么我们可以通过如下方法去调用这个函数.

 SEL_CallFunc f = callfunc_selector(Test::func);
 CCObject* obj = new CCObject();
 (obj->*f)();

总之我觉得这看起来有点诡异- - 反正记住能这么干就好了

代码二:

为了凸显新增加的代码,之前的注释就删掉了。

  1. // callback.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. class
  5. typedefvoid
  6. #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
  7. class
  8. public
  9. int//增加公开的成员变量value
  10. public
  11. void
  12. void
  13. "test->func value:%d"//打印value
  14. intint
  15. new
  16. //赋值100
  17. new
  18. delete
  19. delete
  20. return

运行结果:

如何在cocos2d-x中回调函数

结果分析:

我在Test类里增加了成员变量value,并且给它赋值100,同时在func函数里把它打印出来。与代码一一样的方法来调用func函数,怎么说呢,value打印出来的值不是100而是-33686272,说明它不知道把哪块内存空间里的值给打印出来了。这跟我预想的应该是一样的,毕竟我们从头到尾都没有用到过test这个对象- -如果能打印出100那就更怪异了。那怎么才能打印出test里的成员呢,按逻辑,那一定跟Test类的具体对象有关系。代码三给出方案。

代码三

  1. // callback.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. class
  5. typedefvoid
  6. #define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
  7. classpublic//继承与CCObject
  8. public
  9. int
  10. public
  11. void
  12. void
  13. "test->func value:%d"
  14. intint
  15. new
  16. //CCObject* obj = new CCObject();
  17. //采用test对象去调用
  18. delete
  19. //delete obj;
  20. return

结果:

如何在cocos2d-x中回调函数

结果分析:

 好了,成功打印出了value。

 1.让Test继承CCObject

  2.不再用CCObject的一个对象obj去调用f而是改成Test的一个对象test去调用f

PS:如果采用以下方法去调用也是可以打印出value

CCObject* obj = test;
(obj->*f)();

PS:cocos2d-x的类都是继承与CCObject

关于在cocos2d-x中回调函数的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:如何在cocos2d-x中回调函数-创新互联
链接URL:http://cdiso.cn/article/hppgj.html

其他资讯