现在的位置: 首页 > 综合 > 正文

cocos2d-x 定时器 schedule

2013年12月07日 ⁄ 综合 ⁄ 共 6081字 ⁄ 字号 评论关闭

转自:http://blog.csdn.net/kyfvc/article/details/8268217

 

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

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

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

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

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

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

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

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

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

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

ScheduleTest* layer = new ScheduleTest();

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

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

 

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

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

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

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

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

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

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

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

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

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

ScheduleTest* layer = new ScheduleTest();

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

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

抱歉!评论已关闭.