cocos2dx中回调函数局部变量无效(cocos2d-x学习笔记)
2016-03-14 18:43
429 查看
在项目里我想让主角出场播放一闪一闪的动画,播放完了之后恢复原来的主角颜色,代码如下:
想省事不想有定义一个单独回调函数,又要头文件声明,cpp文件定义,我就把回调函数直接写了,而且我的
m_rRGB也直接定义局不变。
void Role::startAction()
{
auto m_rRGB = m_rSprite->getColor();
auto blink = Blink::create(3,15);
m_rSprite->setColor(Color3B(255,193,163));
auto act = CallFunc::create([&](){
m_rSprite->setColor(m_rRGB);});
m_rSprite->runAction(Sequence::create(blink,act,NULL));
}
但是当游戏启动之后,主角一闪一闪播放完了就消失了。查看回调函数也没问题以及代码绝对没语法问题,那问题出在哪呢?
最后只能慢慢试,发现当在.h文件定义一个回调函数就问题,那么是不是就是回调函数要单独写出来的问题,本着打破砂锅问到底
的心理,我发现根本不是这个问题,而是要把m_rRGB这个变量定义成全局变量,如下:
在.h文件
Sprite*
m_rSprite;
Color3B
m_rRGB;
void Role::startAction()
{
m_rRGB = m_rSprite->getColor();
auto blink = Blink::create(3,15);
m_rSprite->setColor(Color3B(255,193,163));
auto act = CallFunc::create([&](){
m_rSprite->setColor(m_rRGB);});
m_rSprite->runAction(Sequence::create(blink,act,NULL));
}
这样游戏运行就没问题,自己想了下由于CallFunc启动的是回调函数,不管函数体和CallFunc写在一起还是单独定义一
个函数,都属于另外一个函数,而刚开始定义一个局部变量,局部变量出了startAction()函数就被删除了,自然没有值了。
so 问题就是出在这。
想省事不想有定义一个单独回调函数,又要头文件声明,cpp文件定义,我就把回调函数直接写了,而且我的
m_rRGB也直接定义局不变。
void Role::startAction()
{
auto m_rRGB = m_rSprite->getColor();
auto blink = Blink::create(3,15);
m_rSprite->setColor(Color3B(255,193,163));
auto act = CallFunc::create([&](){
m_rSprite->setColor(m_rRGB);});
m_rSprite->runAction(Sequence::create(blink,act,NULL));
}
但是当游戏启动之后,主角一闪一闪播放完了就消失了。查看回调函数也没问题以及代码绝对没语法问题,那问题出在哪呢?
最后只能慢慢试,发现当在.h文件定义一个回调函数就问题,那么是不是就是回调函数要单独写出来的问题,本着打破砂锅问到底
的心理,我发现根本不是这个问题,而是要把m_rRGB这个变量定义成全局变量,如下:
在.h文件
Sprite*
m_rSprite;
Color3B
m_rRGB;
void Role::startAction()
{
m_rRGB = m_rSprite->getColor();
auto blink = Blink::create(3,15);
m_rSprite->setColor(Color3B(255,193,163));
auto act = CallFunc::create([&](){
m_rSprite->setColor(m_rRGB);});
m_rSprite->runAction(Sequence::create(blink,act,NULL));
}
这样游戏运行就没问题,自己想了下由于CallFunc启动的是回调函数,不管函数体和CallFunc写在一起还是单独定义一
个函数,都属于另外一个函数,而刚开始定义一个局部变量,局部变量出了startAction()函数就被删除了,自然没有值了。
so 问题就是出在这。
相关文章推荐
- cocos2d-x iOS真机下载非根目录文件提示下载失败解决办法
- cocos2d js 怎样动态载入外部图片
- cocos2d-x配置Android.mk遍历文件
- 精灵帧缓存SpriteFrameCache-Cocos2dx-lua
- cocos2d-x3.9利用cocos引擎一键打包Android平台APK
- cocos2d-x 3.6版连连看载入资源
- cocos2dx学习笔记之回调函数:定时器schedule,普通回调callfunc,菜单回调menu_selector
- 新建cocos2dx项目时批处理文件
- cocos2d tolua C++对象使用lua对象的变量,函数
- cocos2dx 截屏
- cocos2dx 自定义事件
- cocos2dx 手柄
- cocos2d-x 解决win32下 从文件对话框选择文件,显示在游戏中乱码的问题
- Windows8+VS201+Cocos2dx3.6环境搭建
- cocos2dx 浏览器
- cocos2d 高仿doodle jump 无源代码
- win7 vs2010 安装cocos2d-x
- cocos2d&cocos2dx学习资源
- cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)
- cocos2dx 视频播放器