cocos2d-x学习总结之schedule的局限性
来源:互联网 发布:snow拍照软件下载 编辑:程序博客网 时间:2024/05/26 02:19
在cocos2d-x中schedule的作用就不多说了。先看看在项目中的实际用法。
1.策划需求:
在2个CCSence中都需要显示玩家的分数,如果玩家的分数小于一个阈值则定时给玩家增加分数。
2.程序实现:
看到这个需求后,不由得会想到在2个场景中用schedule启动一个函数来增加分数。
结果:在单独的场景中分数在满足条件的时候会定时增加。然而在这2个场景进行切换的时候却出现问题。
问题:在第一个场景增加分数后,立即切换到下一个场景那么另一个场景的schedule会启动函数增加分手,此时的增加分数的时间间隔就出现了误差。
3.问题分析:
原因在于我们使用的schedule函数的生命周期是与其所在的CCSence的生命周期是一致的。对于当前的程序的结构而言,每一个CCSence中只存放了一个 CCLayer .将所有的层(像捕鱼达人的程序那样)放在一个CCSence中需要对整个程序重写不划算(当然出现这种问题的原因主要是前期经验不足造成的)像捕鱼达人那样,将不同的元素放到不同的层中,是我们前期必须考虑好的。
4.解决方法
只能死马当活马医了,创建一个全局的定时器。在网上查到定义一个全局schedule的方法。看上去比较复杂,弃之。采用boost库中的线程
定时执行一个函数_bet_thread.reset(this,&bet_data::post_increase_event, 60,bet_data_thread::sleep_seconds); 向cocos2d-x的消息中心发
送消息。通过CCNotificationCenter::sharedNotificationCenter()->addObserver注册了该消息的CCLayer会收到消息并执行绑定的函数增加分数。
结果出人意料。bet_data::post_increase_event函数并不在ui线程里面。如果在该函数里面向ccxx消息中心发送消息后,是立即执行的也就是会立即
更新 ui. 这里会出现问题。为解决这个问题,借鉴前面之前用到的方式,在bet_data::post_increase_event中不使用ccx的消息中心,而是向我们之前定义
的全局队列中post一个消息,在ui中异步执行。
OK 今天就这么多吧
接下去会总结上面提到的boost线程的使用问题,和异步post消息。
- cocos2d-x学习总结之schedule的局限性
- cocos2d-x学习笔记(13)--schedule
- cocos2d-x学习笔记(13)--schedule
- cocos2d-x中schedule的使用
- Cocos2D-x schedule & scheduleUpdate 的使用
- Cocos2D-x schedule & scheduleUpdate 的使用
- Cocos2d-x 3.x基础总结 -- 定时器更新schedule/update
- cocos2d-x schedule用法
- cocos2d-x schedule 定时器
- cocos2d-x 定时器 schedule
- cocos2d-x 定时器 schedule
- cocos2d-x schedule 定时器
- cocos2d-x schedule
- cocos2d-x schedule 定时器
- cocos2d-x 定时器schedule
- Cocos2d-x schedule用法
- Cocos2d-x-------------------------定时器schedule
- 【Cocos2d-X开发学习笔记】第11期:时间调度schedule函数的使用
- hdu 4263 Red/Blue Spanning Tree
- 大话设计模式十九:组合模式(分公司 = 一部门)
- 获取Word的页数
- leetcode:Merge k Sorted Lists(按大小顺序连接k个链表)【面试算法题】
- printf()
- cocos2d-x学习总结之schedule的局限性
- NYOJ 题目40 公约数和公倍数
- hdu 4691 Front compression
- HTTP 协议详解
- Qt5功能包之绘图系统--坐标系
- 黑马程序员_java多态
- IOS详解TableView——选项抽屉(天猫商品列表)
- ffmpeg + sdl -03 简单音频播放器实现
- jacob1-17操作word2010