cocos2dx中的定时动作:
DelayTime:
①组合动作,先在一个action中放一个函数,然后在延时动作中调用这个action,最后由对象执行这个延时动作
//第一个action,里面放一个函数
auto cutAction = CallFunc::create(CC_CALLBACK_0(LoadingLayer::callback, this));
//第二个action,延时两秒做cutAction的动作。
CCFiniteTimeAction* action2 = CCSequence::create(CCDelayTime::create(2), cutAction, NULL);
//sprite_jiazai1执行action2的延时操作。
sprite_jiazai1->runAction(action2);
注意:LoadingLayer::callback,需要在LoadingLayer这个类中声明callback()这个方法,并且实现。这个位置可以放你想要放的声明好的函数,callback只是一个例子。
②也可以直接把函数放在延时动作里,可以是封装好的函数,也可以直接在延时动作里写函数。例子:
this->runAction(Sequence::create(DelayTime::create(0.3), CallFunc::create([&](){
Utils::click();
CCLOG("返回");
this->outplay(this);
if (_BuyNum == Get_props) {
}
}), NULL));
Utils::click();
CCLOG("返回");
this->outplay(this);
if (_BuyNum == Get_props) {
}
}), NULL));
③组合动作(RepeatForever:一直执行某个动作,Sequence:按顺序执行后面的动作,EaseSineOut:动作由快到慢,ScaleTo:产生缩放结果第一个参数是达到缩放大小需要的时间,第二个参数是缩放比例,即在0.2秒内缩放到原来的1.2倍;EaseSineIn:动作由慢到快;DelayTime:延时0.5秒
),下面这个动作是按钮背景放大缩小(呼吸效果)
sure_btn_fram_bg->runAction(RepeatForever::create(Sequence::create(EaseSineOut::create(ScaleTo::create(0.2, 1.2)),EaseSineIn::create(ScaleTo::create(0.2, 1)),DelayTime::create(0.5), NULL)));
在cocos2dx中写一个定时器:
实现在线奖励功能,给一个时间倒计时,例如,每隔5分钟就给一次奖励,领取一次奖励后需要再等5分钟或者10分钟才可以继续领取下一次奖励,时间可设,次数可设:
先在.cpp文件的类头声明一个全局的float值,保证只要打开游戏就可以一直计时
//显示的倒计时
float countDownTime=300;//设置第一次倒计时为5分钟
//时间间隔计时
float _time;//不设置,默认是0
在.h文件中继承
extern float countDownTime;//不能在继承中赋值
extern float _time;
public:
CCLabelAtlas * Label_countDown;//游戏倒计时的显示文本
在.cpp文件的update(float dt)中{
_time +=dt;
if(_time == 300){
//5分钟后做的操作写在这里
}
countDownTime -=dt;
//指定countDownTime除以60的值为int整型
int fen = (int)(countDownTime / 60);
//指定countDownTime取余60的值为int整型
int miao =(int)((int)countDownTime % 60);
string timeStr;
if(countDownTime <= 0){
countDownTime = 0;
timeStr = "00:00";
}else{
timeStr =CCString :: createWithFormat("%02d:%02d",fen,miao)->getCString();
}
Label_countDown->setSrting(timeStr.c_str());
}
在init()方法中{
//启动update()
this->scheduleUpdate();
//引申一下,了解一下就可以了
//这句代码可以实现每隔3.0秒调用一次MyUpdate(),MyUpdate()相当于上面例子中的Update()
//this->scheduleUpdate(schedule_selector(HelloWorldd::MyUpdate),3.0f);
//这里是让一个函数在3.0秒的时候只运行一次
//this->scheduleOnce(schedule_selector(HelloWorld::MyUpdate),3.0f);
//初始化倒计时显示文本
//倒计时显示 用指定的font图片 num1.png 来指定数字的样式
Label_countDown = CCLabelAtlas::create("02:00", "num1.png", 12, 17, 48);
Label_countDown->setAnchorPoint(CCPointZero);
Label_countDown->setPosition(ccp(winSize.width / 2-220, winSize.height -125));
Label_countDown->setScale(0.6f);
this->addChild(Label_countDown);
Label_countDown = CCLabelAtlas::create("02:00", "num1.png", 12, 17, 48);
Label_countDown->setAnchorPoint(CCPointZero);
Label_countDown->setPosition(ccp(winSize.width / 2-220, winSize.height -125));
Label_countDown->setScale(0.6f);
this->addChild(Label_countDown);
}
/*注意:
"%02d:%02d"这里2的意思是,如果整数不够2列就补上0,例如:
printf("%02d",3);
输出结果就是:3
如果大于2则没有影响:
printf("%02d",1234);
输出结果是:1234
所以上面输出时间就是:fen:miao,以第一次设置的300秒为例就是:
300/60 取整 fen=5,
300%60 取余 miao=0,
输出:05:00
*/
这些都是一些开发过程中可能遇到的小需求,觉得挺实用的,就记下来做个笔记。
图片资源num1.png:
图片在这上面 透明背景白色字体看不出来,选中另存为就可以拿到了!