cocos2d-x UILoadingBar::SetPercent 崩溃

使用cocostudio1.6.0 UI Editor创建的进度条UI加载在Cocos2d-x 2.2.6版本时,其原有的代码示例如下:

UILoadingBar* pBar = NULL;

pBar =dynamic_cast<UILoadingBar*>(m_pUILayer->getWidgetByName("Bar"));

pBar->SetDirection(LoadingBarTypeLeft);

pBar->setPercent(70);

然后运行代码,结果就崩溃了。然后在vs2010上使用断点跟踪,发现在:

void LoadingBar::SetPercent(int percent)

{

  ...

  if(_totalLength <= 0)    // 在这里发现该变量为0,结果导致程序直接跳出了

    return;

}

既然发现了问题所在,根据自己有限的理解,就想办法给_totalLength 赋值即可。然而,很可惜,没有找到相关的赋值函数,甚至为_totalLength赋值的函数接口LoadingBar::barRendererScaleChangedWithSize()也是protected的。

既然如此,最后使用了这样的方法来编写程序:

UILoadingBar* pBar = NULL;

m_pLevBar = UILoadingBar::create();
m_pLevBar->loadTexture("bar.png",UI_TEX_TYPE_PLIST);
m_pLevBar->setAnchorPoint(ccp(0.5f,0.5f));
m_pLevBar->setPosition(ccp(156,568));

pBar->SetDirection(LoadingBarTypeLeft);

pBar->setPercent(70);

主要原因在与loadTexture,在其接口的内部调用了barRendererScaleChangedWithSize()。

可能这个方法不是最好的,但是对于不想改掉底层,同时各种原因而不得不使用老版本的cocos2d-x的,可能对于新人来说,还算得上是一种可采取的方法吧。

时间: 2024-10-24 14:58:14

cocos2d-x UILoadingBar::SetPercent 崩溃的相关文章

Cocos2D中使用CCDrawNode绘制几何图形崩溃的解决

在cocos2D v3.x中已经不能像在v2.x中那样直接调用ccDrawXXX函数来绘制几何图形了. 我们可以使用CCDrawNode或者CCRenderer来绘制图形. 但是官方的Api手册中说的很清楚,CCDrawNode只推荐放在游戏的调试中调用,因为改变其状态必须先删除再重新添加,导致在绘制大量复杂几何图形时性能会很差. 在cocos2D v2.x中直接调用OpenGL的绘制一般放在draw方法中,但是在v3.4中实际测试发现,将CCDrawNode的绘制放在draw会导致App崩溃,

cocos2d游戏界面卡住声音正常播放的问题分析

cocos2d游戏界面卡住声音正常播放的问题分析 从目前已知的情况看,出现这种情况只可能是设备的内存不够导致的. 从代码上来说内存不够时会调用AppController的“- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;"方法. // purge memory - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

cocos2d 如何优化内存使用

如何优化内存使用 内存优化原理 为优化应用内存使用,开发人员首先应该知道什么最耗应用内存,答案就是纹理! 纹理几乎会占据90%应用内存.所以尽量最小化应用的纹理内存使用,否则应用很有可能会因为低内存而崩溃. 本文介绍Cocos2d-x游戏通用的两条内存优化原理指导. 认识瓶颈寻找方案 什么样的纹理最耗应用内存?或这些纹理会消耗多少内存?当然这个不用手动计算,只需猜测. 工具在这里已经准备好了.使用的是苹果的工具“Allocation & Leaks”.你可以在Xcode中长按“Run”命令,选择

cocos2d调度器(定时执行某函数)

调度器(scheduler) 继承关系 原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Cocos2d-x暂停时,调度器也会停止.当Cocos2d-x重新开始时,调度器也会自动继续启动. Cocos2d-x封装了一个供各种不同平台使用的调度器,使用此调度器你不用关心和跟踪你所设定的定时对象的销毁和停止,以及崩溃的风险. 基础用法 游戏中我们经常会随时间

[cocos2dx]利用NDK崩溃日志查找BUG

摘要: 在android上开发c++应用, crash日志都是汇编码, 很难对应到c++代码中去. 通过此文, 你可以定位到程序崩溃时的C++代码, 精确查找问题. 博客: http://www.cnblogs.com/jhzhu 邮箱: [email protected] 作者: 知明所以 时间: 2014-06-20 背景介绍 本文主要内容: 利用android的crash log来对c++开发的android应用进行错误定位. 容易稳定复现的BUG, 一般可以通过断点调试来解决. 如果测试

iOS中的崩溃类型

http://blog.csdn.net/womendeaiwoming/article/details/44243571 OS中的崩溃类型 在这里了解一下XCode用来表示各种崩溃类型的术语,补充一些这方面的各知识.崩溃通常是指操作系统向正在运行的程序发送的信号,所以我们在查看崩溃日志时,常常看到如下错误摘要:Application received signal SIGSEGV.一般来说,常见的崩溃类型有以下几种: 1.        EXC_BAD_ACCESS 在访问一个已经释放的对象或

如何优化cocos2d程序的内存使用和程序大小

在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个非常有意义的话题:"请简单地讲述你认为新手cocos2d程序员在他开始编码之前,最应该先知道,或者应该关注和注意的事项."这个问题的答案很多,有人讲是"如何加载和保存游戏数据",有人讲的是"如何实现有限状态机"等等.而最吸引我的则是,有一

在cocos2d中添加自己的shader教程

mark下:转载:http://www.cocoachina.com/bbs/read.php?tid=220630 1.cocos2d的shader都是共用的, 存放在   GLProgramCache 中. 当setGLProgram() 的时候是从GLProgramStateCache 中寻找是否有这个shader的State, 有就返回,这个也是共用的,任意一个GLProgramState修改了, 都会影响到使用这个shader的对象 添加shader的方法: 先编写shader: (直

Cocos2D创建多彩文本显示标签

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Cocos2D中默认的CCLableTTF类从源代码里看是支持多彩以及粗体之类的字符显示属性的,但可惜的是在最新的几版的cocos2D里,只能使用单色属性,否则App就会崩溃. 在Github中cocos2D的源代码里,可以看到各位大牛已经发现了这个问题,但是直到目前最新的Cocos2D 3.4.9中这个问题还未解决: [iOS] Attributed Str