cocos2dx中的时序问题的分析

今天遇到一个问题,对于UIListView,在初始化(pushBackCustomItem)之后,如果立即操作的话,由于原件并未重新布局,因此会导致一些奇奇怪怪的问题。查看代码之后,发现doLayout和forceDoLayout可以实现重新布局,而调用者是visit函数。

于是乎,在初始化ListView之后,立即使用visit,再进行listView的操作,就不会出现问题了。不过有一点需要注意的是:在OnEnter的时候,也会调用visit,也就是说实际上visit不止一次。如果第一次visit和第二次visit得到的结果一样,即都是正确的结果的话,那就没有什么问题。否则在手动visit之后,得到的是错误结果,那手动调用这个visit就没有什么用。另外一个问题是,在visit之后,如果进行同步操作,没啥问题。如果进行延时操作,如果在延时结束之前,进行了ListView的items的改变,那会重新DoLayout,一些参数会改变,那接下来的延时操作会偏离原来的设定,出现问题。

如果visit不可用的话,那就必须提供一个通知完全加载(即visit)之后的一个回调,通知可以进行下一步操作,否则就根本不可能做到在加载重新计算完成后做一些操作这样的时序。然后并没有这样的回调,所以只能用visit。

时间: 2024-10-11 23:47:46

cocos2dx中的时序问题的分析的相关文章

关于在cocos2dx中继承Sprite的分析与技巧

本文章特指使用C++作为编程语言,基于cocos2dx游戏引擎开发游戏. 在cocos2dx中,sprite作为精灵类是使用最为频繁的类,与其它类相比,如:Node, Layer或Scene,Sprite最大的不同是它包含一个纹理,通过OpenGL的渲染,在游戏中呈现出来.游戏中的主角,怪物,背景,或是精灵的血条等都是通过Sprite来实现的. 在cocos2dx中,关于创建Sprite的类,根据输入参数的不同有以下几个工厂函数, static Sprite* create() static S

关于COCOS2D-X 中的CCRectMake参数小注

在使用CocoStudio和Cocos2d-x混合编程过程中,坐标转换是不可避免的.因此,要随时注意,当然坐标.Rect是全局性的还是局部性的.时间长了,许多基础内容易于忘记,这不---小小的宏函数CCRectMake的参数各自函数就忘记了!故备注于此. 在编码时,当忘记相应参数含义时,我常常按下快捷键F12,转换相应的头文件去分析一下.可怜的是,宏函数CCRectMake各个参数就没有很好的注解. 格式:CCRectMake(x,y,width,height) 对于Widget控件,一般情况下

C++11中once_flag,call_once实现分析

本文的分析基于llvm的libc++,而不是gun的libstdc++,因为libstdc++的代码里太多宏了,看起来蛋疼. 在多线程编程中,有一个常见的情景是某个任务只需要执行一次.在C++11中提供了很方便的辅助类once_flag,call_once. 声明 首先来看一下once_flag和call_once的声明: struct once_flag { constexpr once_flag() noexcept; once_flag(const once_flag&) = delete

一起C语言中程序时序问题的排查过程

[文章摘要] 对于由多个模块协同工作的软件来说,程序处理的时序是很重要的.当消息处理的顺序出现混乱时,程序就会出现异常. 本文基于作者的实际项目经验.对软件模块之间的时序问题进行了具体的分析,为相关软件问题的分析及解决提供了故意的參考. [关键词] C语言  时序  模块  开发  消息 一.问题描写叙述 在某软件版本号中,有两个模块(模块A与模块B)之间要进行通信. 通信链路建立起来之后.模块A向模块B发消息,消息中携带了用户号码及序列号.在消息发送成功之后,模块A依照序列号将用户号码存放到一

cocos2dx中怎样把texture保存为pvr或者pvr.ccz格式的文件

本文给大家介绍下在cocos2dx中怎样把texture保存为pvr或者pvr.ccz格式的文件 pvr格式的数据在IOS上直接交给显卡渲染的,而cocos2dx 中的texture是直接交给显卡渲染的,所以理论上将pvr格式的数据可以不进行任何数据的转换就可以生成一张texture,事实上确实是这样的. 一, 保存为pvr格式 要保存pvr文件,我们首先分析cocos2dx引擎中是怎样解析pvr文件的.可以看到cocos2dx库中的CCTexturePVR类提供了两个方法来解析pvr格式图片分

cocos2d-x 2.2.3 之菜单分析(1)

TextEdit-Menu CCtextFieldTTF cocos2d – x 中提供的 bool T04ZORDER::init() { if (!CCLayer::init()) { return false; } CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCTextFieldTTF * textField; textField = CCTextFieldTTF::textFieldWithPlaceHold

cocos2dx 中切换场景内存占用过高的处理

cocos2dx 中切换场景内存占用过高的处理 1.运行场景: CCScene *pScene = HelloWorld::scene(); pDirector->runWithScene(pScene); 2.替换场景: (1) CCScene *pScene=SceneTestScene::scene(); CCDirector::sharedDirector()->replaceScene(pScene); (2) CCScene *pScene=SceneTestScene::scen

Quartus中添加时序约束

1.sdc文件也是要添加到Quartus 软件中,这样在执行Read SDC File命令时才能读到相应的文件. 2.在TimeQuest打开的条件下,重新编译工程之后要Update Timing Netlist,这样TimeQuest分析器会得到最新的 网表文件进行时钟分析. 转载地址http://www.cnblogs.com/pejoicen/p/4194380.html PLL时钟约束 # Uncommenting one of the following derive_pll_cloc

cocos2d-x 中的坐标系

cocos2d-x 中的坐标系是笛卡尔坐标系,向右为 x 轴正方向,向上为 y 轴正方向,以像素为单位 原点在屏幕左下角的坐标系叫世界坐标系,是整个游戏中的根基,直接添加到场景中的节点,设置的位置都是指世界坐标系,getPosition 返回的都是世界坐标系 每个节点都可以当做一个坐标系,节点坐标系的原点位于其内容的左下角,节点添加子节点时, 子节点设置的位置,按照父节点的坐标系,当父节点的坐标变化时,子节点也做相同的变化,即子节点相对父节点不变:节点坐标系是坐标系中的坐标系,分析某个节点坐标一