【Cocos2d-X开发学习笔记】第11期:时间调度schedule函数的使用

本文详细介绍了Cocos2d-x游戏开发框架中的更新机制,包括scheduleUpdate函数和schedule函数的使用方法及示例代码,展示了如何通过这两种方式控制游戏元素的实时更新与移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010

      

 

       对于一个游戏而言,只存在精灵、层、场景等元素是不完整的,而缺少的正是这些元素的逻辑。例如精灵移动的

辑、动画逻辑、碰撞逻辑等,而这些逻辑一般情况下是需要及时做出反馈的,所以我们这些逻辑将放置在更新函数

中不停地循环判定。

 

 

一、scheduleUpdate函数

 

     此函数是CCNode的函数,每个CCNode只要调用scheduleUpdate()更新函数,那么这个CCNode就会响应当前类

update(float dt)函数。

 

1、示例代码如下所示。

 

<1> 首先新建Cocos2D-X项目,在HelloWorldScene.h头文件中定义update函数。

 //更新函数
    void update(float dt);    


 

<2> 然后在HelloWorldScene.cpp文件的init函数中添加如下代码。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        //////////////////////////////////////////////////////////////////////////
        // super init first
        //////////////////////////////////////////////////////////////////////////

        CC_BREAK_IF(! CCLayer::init());

		CCSprite* sp = CCSprite::create("Icon.png");
		sp->setPosition(ccp(80,100));
		addChild(sp,0,922);
		
		//更新函数
		scheduleUpdate();
    
        bRet = true;
    } while (0);

    return bRet;
}


<3> 最后实现update更新函数。

void HelloWorld::update(float dt){
    // 停止更新
	// unscheduleUpdate();
    
    CCSprite*sp =(CCSprite*)this->getChildByTag(922);
    
	if(sp->getPositionX()<260){
        sp->setPosition(ccpAdd(sp->getPosition(), ccp(2,2)));
    }else{
        sp->setPosition(ccpAdd(sp->getPosition(), ccp(2,-2)));
    }
}

代码首先定义了一个精灵且设置tag索引值992,然后在更新函数中通过tag获取其精灵,让其坐标不断发生变化。


 

2、示例效果图。

 

运行项目,可以看到这个精灵在不断的移动。

               

 

 

二、schedule函数

 

    schedule的作用与scheduleUpdate()函数相同,但是scheduleUpdate()默认每一帧都会调用update函数,而

schedule则可以自定义调用更新函数的时间间隔。

 

1、两种Schedule函数说明如下。

 

<1> schedule(SEL_SCHEDULE selector,float interval)

参数1:目标更新函数。

参数2:刷新间隔。

 

<2> schedule(SEL_SCHEDULE selector)

作用:此函数默认每一帧都调用目标函数。

参数:目标更新函数。

 

注意:刷新间隔时间的单位是s(秒)。

 

 

2、示例代码如下。

 

<1> 首先新建Cocos2D-X项目,在HelloWorldScene.h头文件中定义myUpdate函数。

//自定义更新函数
    void myUpdate(float dt);

 

<2> 然后在HelloWorldScene.cpp文件的init函数中添加如下代码。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {     
        CC_BREAK_IF(! CCLayer::init());

		CCSprite* sp = CCSprite::create("Icon.png");
		sp->setPosition(ccp(80,100));
		addChild(sp,0,922);
		//自定义更新函数 每一帧都调用
		//schedule(schedule_selector(HelloWorld::myUpdate));
		//自定义更新函数 每秒执行一次
		schedule(schedule_selector(HelloWorld::myUpdate),1.f);

        bRet = true;
    } while (0);

    return bRet;
}


<3> 最后实现自定义的myUpdate更新函数。

void HelloWorld::myUpdate(float dt){
    // 停止更新
	// unschedule(schedule_selector(HelloWorld::myUpdate));
    
    CCSprite*sp =(CCSprite*)this->getChildByTag(922);
    if(sp->getPositionX()<260){
        sp->setPosition(ccpAdd(sp->getPosition(), ccp(5,5)));
    }else{
        sp->setPosition(ccpAdd(sp->getPosition(), ccp(5,-5)));
    }
}


 

3、示例效果图。

 

                   

 

 

三、停止更新函数方法

 

1、停止默认的update更新函数。

unscheduleUpdate();

 

2、停止自定义更新函数。

unschedule(SEL_SCHEDULE selector);

参数:自定义的更新函数。

 

3、停止所有更新函数。

unscheduleAllSelectors()


 

 

源码下载地址

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值