cocos2dx延时动作DelayTime,自己写一个定时器等

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));



③组合动作(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);
}

/*注意:
"%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

图片在这上面 透明背景白色字体看不出来,选中另存为就可以拿到了!
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值