cocos2dx : schedule 计时,调用崩溃
来源:互联网 发布:php项目部署到apache 编辑:程序博客网 时间:2024/04/28 03:26
这个问题还不知道怎么用标题来说明
问题如下:
有一个Scene如下:
class FirstScene : public cocos2d::CCLayer{public: virtual bool init(); static cocos2d::CCScene* scene(); CREATE_FUNC(FirstScene); void start(float f); CCNode *anim;};里面有一个start函数,是一个定时器回调。有一个节点,比如是一个动画什么的。start函数如下:
void start(float f){ anim->doSomething();}
现在我要做的事情,是要让这个节点anim过段时间之后,执行start函数。有时候惯性思维(以前用wiengine),就直接这么写了
anim->schedule(SEL_SCHEDULE(start));然后一运行,就崩了,崩的还很诡异,说anim是空指针。
原因如下:
schedule函数,在ccnode里面的定义
void CCNode::schedule(SEL_SCHEDULE selector){ this->schedule(selector, 0.0f, kCCRepeatForever, 0.0f);}然后会调用到
void CCNode::schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay){ CCAssert( selector, "Argument must be non-nil"); CCAssert( interval >=0, "Argument must be positive"); m_pScheduler->scheduleSelector(selector, this, interval , repeat, delay, !m_bRunning);}发现问题没有,请注意第一个参数和第二个参数。第一个参数就是执行的函数指针。第二个参数,他直接把自己(this)作为m_pScheduler的参数丢进去了。最后在触发回调之后,他的调用就会成为
(m_pTarget->*m_pfnSelector)(m_fElapsed);这里的m_pTarget就成了this,由于我们之前是用anim启动schedule,所以这个this就成了anim。那么在anim对象里面去找一个叫anim的变量,就找不到了。
解决办法:
1、从包含你要操作的成员的类启动schedule。
2、如果这个类没有schedule函数,或者说她不是node的子类,用scheduler的scheduleSelector启动,因为这个可以手动设置this指针,把this设置成第一点说的。
- cocos2dx : schedule 计时,调用崩溃
- cocos2dx schedule/update不起作用的调用
- [cocos2dx] schedule
- cocos2dx schedule
- cocos2dX 事件schedule
- Cocos2dx 定时器schedule
- mysql的event schedule 计时执行
- cocos2dx教程之CCLayer schedule
- cocos2dx 定时器 schedule scheduleUpdate scheduleOnce
- Cocos2dx崩溃日志跟踪
- cocos2dx android 音效崩溃
- Android handler计时调用
- schedule调用相关整理
- cocos2dx 3.x schedule的认识
- Cocos2dx学习第九章(schedule简介)
- cocos2dx 定时器使用 schedule,scheduleUpdate,scheduleOnce
- pthread_getschedparam函数 调用崩溃
- 调用 inet_ntoa 程序崩溃
- c++学习之路
- 向函数传递二维数组
- 查看线程的cpu使用率
- 常用文件重定向命令
- 完全数
- cocos2dx : schedule 计时,调用崩溃
- 《High Performance JavaScript》的一些摘要3
- 各种排序集结&归并排序
- Delphi中票据凭证的精确打印
- UVa 10081 Tight Words (DP)
- Android百度地图知识讲解
- Java泛型原理笔记
- S3C2440的DMA资源
- CSS3属性选择器