cocos2dx 3.0 时间调度器

cocos2dx 有三种时间调度,
scheduleUpdate 需要玩家重载当前的update函数,每一帧都会调用一次,但是调度的时间是不确定的,如果是60帧的,时间在0.017s左右,通过unschedulerUpdate()停止该调度器

schedule 自定义调度器 实现以一定的时间间隔连续调用某个函数,同时也可以指定调度多少次;调度的时间间隔必须大于两帧之间的最短事件(大于0.1s)
文档里面的参数:
我们来看下scheduler(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)函数里面的参数:

第一个参数selector即为你要添加的事件函数
第二个参数interval为事件触发时间间隔
第三个参数repeat为触发一次事件后还会触发的次数,默认值为kRepeatForever,表示无限触发次数
第四个参数delay表示第一次触发之前的延时

scheduleOnce 单次调度器 只会调度一次,另外在调度的过程中(调度器执行过程)不能再次使用单次调度器,否则新的调度器不会执行(可能和锁有关?没看过代码。。。)

自定义调度器和单次调度器都通过unschedule(SEL_SCHEDULE selector, float delay)来取消该触发器

简单的使用例子

this->schedule(schedule_selector(HelloWorld::test), 2);
void HelloWorld::test(float dt)
{
    //auto rootNode = getChildByName("main");
    //DisplayCircle* displayCircle = static_cast<DisplayCircle *>(rootNode->getChildByName("DisplayCircle"));
    //displayCircle->setPos(Point(200, 200));
    //DisplayCircle* displayCircle = static_cast<DisplayCircle *>(rootNode->getChildByName("circle_1"));
    //deleteCircle(displayCircle);
    int y = random(0, 480);
    if (monsterProducer->monster_list.size() == 0) {
        monsterProducer->produce(Vec2(960,y),20);
        return;
    }
    else {
        int flag = random(0, 1);
        if (flag) {
            monsterProducer->produce(Vec2(960, y), 20);
        }
        else {
            int which = random(0, int(monsterProducer->monster_list.size() - 1));
            Monster *temp = monsterProducer->monster_list.at(which);
            monsterProducer->die(temp);
        }
    }
}
this->scheduleUpdate();
void HelloWorld::update(float dt)
{
    CCLOG("update");
    auto rootNode = getChildByName("main");
    //auto monster=static_cast<Monster* >(rootNode->getChildByName("monster"));
    //monster->run(dt);
    monsterProducer->runAll(dt);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值