cocos2d-x学习笔记(13)--schedule

来源:互联网 发布:如何电脑共享手机网络 编辑:程序博客网 时间:2024/06/06 12:54

在游戏中,要检测两个运动的物体什么时候否碰撞,就必须在每一帧中对两个物体的矩阵范围进行判断,是否出现相交。同样的,一些游戏动画,为了做出动画效果,我们在设置动作的同时,还需要对每一帧的画面进行布局,在cocos2d-x中就可以使用schedule()函数实现了。

下面是schedule()函数的定义:

 

[cpp] view plaincopyprint?
  1. void CCNode::schedule(SEL_SCHEDULE selector)  
  2. {  
  3.     this->schedule(selector, 0);  
  4. }  
  5.   
  6. void CCNode::schedule(SEL_SCHEDULE selector, ccTime interval)  
  7. {  
  8.     CCAssert( selector, "Argument must be non-nil");  
  9.     CCAssert( interval >=0, "Argument must be positive");  
  10.   
  11.     CCScheduler::sharedScheduler()->scheduleSelector(selector, this, interval, !m_bIsRunning);  
  12. }  

这里我只说第二个函数,第一个参数是回调类型,这里使用schedule_selector,如schedule_selector(MyClass::MyCallbackFunction),第二个参数是间隔时间,即多久调用MyCallbackFunction函数;

 

step1:创建cocos2d-win32项目,并命名为scheduler;

step2:在HelloWorldScene.h中添加如下类:

[cpp] view plaincopyprint?
  1. class ScheduleTest:public CCLayer  
  2. {  
  3. protected:  
  4.     int posX;//用于每次调用addTarget函数时增加对象水平方向的位置  
  5. public:  
  6.     ScheduleTest();  
  7.   
  8.     virtual void onEnter();  
  9.     void addTarget(ccTime dt);//每次调用会增加一个精灵  
  10. };  


 

step3:在HelloWorldScene.cpp中添加如下函数:

[cpp] view plaincopyprint?
  1. ScheduleTest::ScheduleTest()  
  2. {  
  3.     posX = 0;  
  4. }  
  5.   
  6. void ScheduleTest::onEnter()  
  7. {  
  8.     CCLayer::onEnter();  
  9.   
  10.     schedule(schedule_selector(ScheduleTest::addTarget), 1);  
  11. }  
  12.   
  13.   
  14. void ScheduleTest::addTarget(ccTime dt)  
  15. {  
  16.     posX += 10;  
  17.     CCSprite* player = CCSprite::spriteWithFile("player.png");  
  18.     addChild(player);  
  19.     player->setPosition(ccp(posX, 100));  
  20. }  


 

同时修改HelloWorldScene中的scene函数,将HelloWorld *layer = HelloWorld::node();改为

ScheduleTest* layer = new ScheduleTest();

 

step4:编译运行程序,可以看到每隔一秒钟,背景就会增加一个人物;

 

 

源代码下载地址:http://download.csdn.net/download/wen294299195/4525824

原创粉丝点击