Cocos2d-x学习(4) - cocos2d-x中的定时器
1.Cocos2d-x定时器简介Cocos2d-x中一共有三种定时器: 三种定时器中帧循环的实时性最高,帧循环定时器是在Cocos2d-x程序界面每帧图像显示时运行的定时器。帧循环定时器常常用于游戏中物体的碰撞检测。 2、帧循环定时器使用方法:在init中使用帧循环定时器打开帧循环定时器,打开帧循环定时器的函数是: scheduleUpdate(); //打开帧循环定时器,需要重载一个update()回调函数
帧循环定时器运行时,会在每一帧重绘的时候去调用一个名字为update的回调函数,所以在Layer类中需要重写update函数。 void update(float delta) override;
完成上述工作时候,在运行过程中就会在每一帧图像重绘的时候调用这个update函数了。有些时候可能还需要关闭帧循环定时器,这时候就需要使用一个函数: unscheduleUpdate(); //停止帧循环定时器
该函数运行后,帧循环定时器就会被关闭,也就是说不会再去调用update回调函数。 的最多的一种定时器,他可以根据我们自己的实际需要来设置成不同的工作模式。 3、一次性定时器一次性定时器就是在运行过程中只会调用依次回调函数的定时器。使用示例如下: //一次性定时器,2s中后开始执行
scheduleOnce(schedule_selector(T03Schedual::mySchedual),2);
该函数有两个参数,第一个参数包装一个类的成员函数(这个成员函数就是回调函数),第二个参数表示在定时后的x s后执行回调函数。 4、自定义定时器自定义定时器有三个重载的形式: <1> schedule(schedule_selector(T03Schedual::mySchedual));
<2> schedule(schedule_selector(T03Schedual::mySchedual),2);
<3> schedule(schedule_selector(T03Schedual::mySchedual),2.0,10,2);
5、定时器的使用游戏动画的本质就是界面的重新绘制。使用定时器,在定时器中完成精灵的移动就可以完成动画的效果。代码涉及到 getChildByTag(),该函数的功能是从渲染树上获取Tag为固定值得精灵。下面代码实现使用定时器绘制在界面上左右移动的精灵,精灵的添加是在init函数中完成。 CCSprite *spr = CCSprite::create("woman.png");
spr->setScale(0.3);
CCSize sz = CCDirector::sharedDirector()->getWinSize();
spr->setPosition(ccp(100,sz.height / 2));
spr->setTag(100);
addChild(spr);
void T03Schedual::mySchedual(float dt)
{
CCSprite *spr = (CCSprite*)(getChildByTag(100));
float v = 300 / 2;
static bool flag = true; //向右走
if (flag)
{
spr->setPositionX(spr->getPositionX() + v*dt);
if (spr->getPositionX() >= 400)
flag = !flag;
}
else
{
spr->setPositionX(spr->getPositionX() - v*dt);
if (spr->getPositionX() <= 100)
flag = !flag;
}
//CCLog("Once Timer %gn",dt);
}
运行结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |