cocos2dx中CC_CALLBACK_1等宏中this指针实际指向
首先看代码,我在Helloworld中添加两个函数。
void HelloWorld::addTarget(){
Size visibleSize = Director::getInstance()->getVisibleSize();
auto target = Sprite::create(, , , ));
int cSizeH = target->getContentSize().height;
int cSizeW = target->getContentSize().width;
;
;
int rangeY = maxY - minY;
int actualY = (CCRANDOM_0_1() * rangeY) + minY;
target->setPosition(Point(visibleSize.width + cSizeW /,actualY));
);
int minDuration = 2.0;
int maxDuration = 4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = (CCRANDOM_0_1() * rangeDuration) + minDuration;
auto actionMove = MoveTo::create(actualDuration,Point(-cSizeW/,actualY));
auto actionMoveDone = CallFuncN::create(
CC_CALLBACK_1(HelloWorld::spriteMoveFinishedCallback,this));
target->runAction(Sequence::create(actionMove,actionMoveDone,NULL));
}
void HelloWorld::spriteMoveFinishedCallback(Ref* pSender){
Sprite* sprite = static_cast<Sprite*>(pSender);
this->removeChild(sprite);
}
一般来说,我们使用CC_CALLBACK_1这个宏来绑定HelloWorld类中spriteMoveFinishedCallback函数和this指针,既然代码处于HelloWorld类中,我们会认为this指针是指向函数所在的HelloWorld类对象。可是,实际调试代码发现,this指针指向的是调用这个动作(cocos2dx中把函数调用认为是动作的一种)的对象,在这里也就是那个target。
其实仔细想来,this指针在这里确实是这样的,this指针真正的初始化应该发生在target这个对象调用动作的时候,这时候,自然就把target对象传递给了this指针。
cocos2dx中CC_CALLBACK_1等宏中this指针实际指向的更多相关文章
- Qt中的Q_D宏和d指针
_ZTS7QObject 一.Q_D的在文件中的提法 Q_D的设置意在方便地获取私有类指针,文件为qglobal.h.下面的##是宏定义的连字符.假设类名是A,那么A##Private翻译过来就是AP ...
- VC中常用的宏
我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预 ...
- C,C++宏中#与##的讲解[转]
MoreWindows 专注于Windows编程 C,C++宏中#与##的讲解 文中__FILE__与示例1可以参见<使用ANSI C and Microsoft C++中常用的预定义宏> ...
- C语言中如何使用宏
C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 宏使用中的常见的基础问题 #符号和##符号的使用 ...符号的 ...
- 不要在 _ASSERT() 宏中执行功能代码 AND RELEASE版调试办法
程序在DEBUG版正常运行,在RELEASE版就崩溃了,想调试找问题,却发现RELEASE版根本走不到断点... 需要在工程配置中将 Configuration Properties- ...
- 深入理解JS函数中this指针的指向
函数在执行时,会在函数体内部自动生成一个this指针.谁直接调用产生这个this指针的函数,this就指向谁. 怎么理解指向呢,我认为指向就是等于.例如直接在js中输入下面的等式: console.l ...
- (转)MFC中Doc,View,MainFrmae,App各指针的互相获取
App是应用域,所有的域中的东西都可以通过全局函数访问到它. MainFrame是主框架,也基本可以用全局函数访问到. MainFrame下是若干个ChildFrame,ChildFrame中若干个V ...
- MFC中 SDI/MDI框架各部分指针获取方式
VC MFC SDI/MDI框架各部分指针获取方式 整理总结一下,希望能帮助到别人. 获得CWinApp 获得CMainFrame 获得CChildFrame 获得CDocument 获得CV ...
- linux中的部分宏
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
随机推荐
- struts2文件目录结构
apps 文件夹包含了多个 example 示例应用的压缩包. docs 文件夹包含了 struts 官方的帮助文档. lib 文件夹包含了 struts 提供的类库 jar 包. src 文件夹包含 ...
- js007-函数表达式
js007-函数表达式 本章内容 1.函数表达式的特征 2.使用函数实现递归 3.使用闭包定义私有量 定义函数的方式有两种:一:函数声明,二:函数表达式 函数声明: function function ...
- 用LinkedList模拟栈数据结构的集合
用Eclipse软件进行操作 有2种方法,左边为第一种,右边为第二种 创建class为MyStack 代码实现: package cn_LinkedList; import java.uti ...
- C#------如何判断输入的是否为纯数字
private void Btn_OK_Click(object sender, EventArgs e) { IDormitoryAdminCardService aservice = new Do ...
- socket传数据并记录到文件中
最近在新项目中要通过socket传一些数据,下面是程序: 功能: 将客户端发送的json数据写入到日志文件中,如果数据不是json的,丢弃. 程序如下: #!/usr/bin/env python # ...
- mysql查询区分大小写
Mysql默认查询是不分大小写的,可以在SQL语句中加入 binary来区分大小写: BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区 ...
- jquery serialize()方法可以序列化表单值为字符串
<form> <div><input type="text" name="a" value="1" id=&q ...
- validate jquery 注册页面使用实例 详解
官方使用文档:http://jqueryvalidation.org/documentation/ 参考资料:http://www.w3cschool.cc/jquery/jquery-plugin- ...
- phpmyadmin 链接远程mysql
这个只是自己的笔记 新手 不记下来以后又忘记了~ 在这以前已经给mysql设置了可以远程连接的账户 版本 phpMyAdmin-4.2.11-all-languages 解压到D盘下www 本地环 ...
- centos 安装 svn-1.9.4
wget http://mirrors.cnnic.cn/apache/subversion/subversion-1.9.4.tar.gzwget http://mirror.bit.edu.cn/ ...