柒哥原创 ,欢迎转载,转载请在明显处注明! 谢谢。
原文地址:点击打开链接
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之前了。