您的位置:首页 >> Cocos2d-x >> 和屌丝一起学cocos2dx-更新函数

和屌丝一起学cocos2dx-更新函数

[ 孤狼 | 2015-02-09 17:14:59 | Cocos2d-x | 2505°C | 0条评论 ]
声 明

本教程仅用于初学cocos2dx同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用cocos2dx版本为2.1.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。
gl.paea.cn版权所有。


       大家好,欢迎回到“和屌丝一起学cocos2dx”系列教程,上节我们说到了“draw绘图”,可能里面有些东西大家看起来感觉和大家买到的教材不一样,这是很正常的,因为大家买到的教材所说的东西都是老版本的了比如说Himi的教材,就是使用的2.0.2版本,但是里面有些函数当然还是少数在2.1.4里面已经不能用了,或者改变了使用方法。所以大家可不能死学,一定要变通啊。如果发现实现不了呢,记得去查一下API。API里面给出的就是这个函数的用法等信息,所以是最权威的哦。好了我们开始今天的教程吧,今天我们说一下,更新函数。



【一】:为啥要这个


       大家都知道,一个程序要是在运行不能说让他显示了,让他播放了,这就叫运行, 我们要让他时时刻刻都在根据我们定的规矩变化着,比如电子表,如果显示就算运行,那么不走的话,岂不是没有意义。更新函数,就是这个大的自动循环体,我们把规矩放进去,他每隔一定时间就会判断一下我们的规矩,看看是不是该动了,是不是该执行某条命令了。


【二】:函数


1.scheduleUpdate

2.[1]schedule("目标函数");//等同于scheduleUpdate

2.[2]schedule("目标函数","更新时间f");

2.[3]schedule("目标函数","更新时间f","更新次数","每次等待时间f");

3.scheduleOnce("目标函数","等待时间f");

区别1:scheduleUpdate刷新间隔为每一帧,schedule刷新间隔可以自己设置(默认1帧),scheduleOnce只执行一次。

区别2:scheduleUpdate函数会自动刷新当前类中的update函数体,而schedule和scheduleOnce可以指定刷新的函数体


【三】:示例


老规矩不说了建项目。Updatedemo


Updatedemo.h


1.我们要定义一个更新函数update();

void update(float tmd); //这里一定要传参,否则不会调用哦

2.我们再定义一个更新函数myupdate();

void myupdate(float tmd);

3.我们再定义一个更新函数myupdate3();

void myupdate(float tmd);

4.在定义3个变量用于做判断

int a;

int b;

int c;




Updatedemo.cpp


1.我们先设置三个精灵,让三个函数以三种速度移动。


CCSize mysize=CCDirector::sharedDirector()->getWinSize();

CCSprite * sp1=CCSprite::create("CloseNormal.png");

sp1->setPosition(ccp(0,mysize.height-50));

this->addChild(sp1,0,521);

CCSprite * sp2=CCSprite::create("CloseNormal.png");

sp2->setPosition(ccp(0,mysize.height-150));

this->addChild(sp2,0,522);

CCSprite * sp3=CCSprite::create("CloseNormal.png");

sp3->setPosition(ccp(0,mysize.height-250));

this->addChild(sp3,0,523);

a=1;

b=1;

c=1;



2.我们要先在初始化函数里调用scheduleUpdate函数和schedule函数以及scheduleOnce函数。


scheduleUpdate();

schedule(schedule_selector(Updatedemo::myupdate),1.0f);

scheduleOnce(schedule_selector(Updatedemo::myupdate2),3.0f);



3.实现我们的3个更新函数。


void Updatedemo::update(float tmd){

   CCSprite * sp=(CCSprite*)this->getChildByTag(521);

   if(a==1){

       sp->setPositionX(sp->getPositionX()+1);

   }else{

       sp->setPositionX(sp->getPositionX()-1);

   }

   if(sp->getPositionX()<0){

       a=1;

   }

   if(sp->getPositionX()>480){

       a=-1;

   }

}


void Updatedemo::myupdate(float tmd){

   CCSprite * sp=(CCSprite*)this->getChildByTag(522);

   if(b==1){

       sp->setPositionX(sp->getPositionX()+10);

   }else{

       sp->setPositionX(sp->getPositionX()-10);

   }

   if(sp->getPositionX()<0){

       b=1;

   }

   if(sp->getPositionX()>480){

       b=-1;

   }

}


void Updatedemo::myupdate2(float tmd){

   CCSprite * sp=(CCSprite*)this->getChildByTag(523);

   if(c==1){

       sp->setPositionX(sp->getPositionX()+100);

   }else{

       sp->setPositionX(sp->getPositionX()-100);

   }

   if(sp->getPositionX()<0){

       c=1;

   }

   if(sp->getPositionX()>480){

       c=-1;

   }

}



       好了,到这里就可以去运行了。我们来一起看看效果吧。



       好了,这里最上面的sp1是每帧都运行,中间的sp2是1秒一次,最下面的sp3只运行一次。你,学会了吗?


本节DEMO下载


转载请注明出处:http://gl.paea.cn/n.php?n=18
 
如您看得高兴,欢迎随意投喂,让我们坚持创作!
赞赏一个鸡腿
还没有人留下遗迹
综合 · 搜索