shedule定时器的使用,以及定时器无法执行原因

柒哥原创 ,欢迎转载,转载请在明显处注明! 谢谢。

原文地址:点击打开链接


MainScene.h文件中,进行回调函数的声明

class MainScene : public cocos2d::CCLayer
{
public:
	MainScene();
    virtual bool init();  
    static cocos2d::CCScene* scene();
    void menuCloseCallback(CCObject* pSender);
    CREATE_FUNC(MainScene);

void step(float dt);//回调函数,注意参数
};

MainScene.c文件中,实现回调函数,调用定时器

bool MainScene::init()
{
    bool bRet = false;
    do 
    {
            CC_BREAK_IF(! CCLayer::init());
			//启动定时器
        	schedule(schedule_selector(MainScene::step),1.2f);

        	bRet = true;
    } while (0);

    return bRet;
}

//step函数的实现 ,即定时器的回调函数
void MainScene::step(float dt)
{   
      //取得屏幕大小
        CCSize size=CCDirector::sharedDirector()->getWinSize();
        //创建一行文本
        CCLabelTTF* label=CCLabelTTF::create("Hello","Arial",30);
       //CCRANDOM_0_1()是一个获取随机数的宏,随机产生一个0-1之间的数
       float x=size.width * CCRANDOM_0_1();
        float y=size.height * CCRANDOM_0_1();
        //设置位置
        label->setPosition(ccp(x,y));
        //添加到布景
        addChild(label);
}

使用定时器时出现的问题

时间到了,定时器始终无法调用step函数

解决方法

1.     在调用schedule(schedule_selector(HelloWorld::step),1.2f);之前,调用一下CCNode::onEnter();

2.     去掉你自己重载的onEnter()函数

// virtual voidonEnter();

 

原因:

在自己写的类里边想调用schedule_selector来执行更新操作,不过怎么都执行不了,后来在cocos2d-x.org的论坛发 现需要在执行schedule之前执行CCNode::onEnter()之后schedule才生效。想来平时也没有写onEnter也都可以生效为什 么这回不行了呢,原因在于schedule需要一个参数m_bRunning为true时候才起作用,而在我们执行CCNode::onEnter()的 时候会将这个赋值为true,平时由于我们使用CCDirector的时候,CCDirector会启动启动mainLoop里边会调用到onEnter 所以只要调用了CCDirector也就不用添加onEnter在schedule之前了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值