cocos2d-x 帧循环不严谨造成场景切换卡顿
最近在用cocos2d-x做引导界面,2dx版本是2.2.3,场景切换加上了效果,所有资源都已经使用texturepacker打包预加载,但是在实际运行调试中,场景切换相当卡顿。
各种纠结后,无意中将帧率打印(setDisplayStats(true))放出来,发现一个严重的问题,对象数量一直在增加,导致帧率不断下降,等到场景切换时,已经完全跑不动了。仔细查看代码之后发现,我在场景帧循环(update())里面有监控手机网络状态,并且根据网络状态需要移除一些精灵,然后创建一些精灵并显示出来,问题就在这里。
void SkyGuideSecondPage::update(float delta)
{
char wlan_state[] = {};
property_get("coocaa.wlan_state", wlan_state, "");int wlanstate = atoi(this->guideinfo.wlan_state); if (wlanstate == )
{
this->removeChildByTag();
CCSprite *sp_connecting = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("guide_connecting_ttf"));
sp_connecting->setAnchorPoint(ccp(, ));
sp_connecting->setPosition(ccp(, ));
sp_connecting->setScale(1.5f);
this->addChild(sp_connecting);
//如果wlanstate在某一时刻开始等于1了,那么将会从这一帧起,每一帧创建一个sp_connecting精灵,一秒帧循环40次,那么每秒就创建了40个相同的精灵,哗啦啦的各种消耗上来了,再场景切换,肯定卡了,所以在这里需要加一个状态判断,保证sp_connecting只创建一次就好了。
}
修改后的代码:
void SkyGuideSecondPage::update(float delta)
{
char wlan_state[] = {};
property_get("coocaa.wlan_state", wlan_state, "");
int wlanstate = atoi(this->guideinfo.wlan_state); if (wlanstate == )
{
if (this->connectflag == )//初始状态为0,状态判断
{
this->connectflag = ;//将状态置1,这样下一帧就进不来了,精灵sp_connecting就不会再次被创建了
this->removeChildByTag();
CCSprite *sp_connecting = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("connecting"));
sp_connecting->setAnchorPoint(ccp(, ));
sp_connecting->setPosition(ccp(, ));
sp_connecting->setScale(1.5f);
this->addChild(sp_connecting);
}
}
cocos2d-x 帧循环不严谨造成场景切换卡顿的更多相关文章
- 4.帧循环(游戏循环),schedule
1 概述 游戏乃至图形界面的本质是不断地画图,然而画图并非任意的,不论什么游戏都须要遵循一定的规则来呈现出来,这些规则就体现为游戏逻辑.游戏逻辑会控制游戏内容,使其依据用户输入和时间流逝而改变. ...
- cocos2dx中帧循环的伪代码实现
1.在游戏开发中,帧率很大程度上体现了游戏的流畅度,帧循环是游戏中一个很重要的概念 2.下面用伪代码实现了cocos2dx中的帧循环 /*main函数调用*/ CCApplication::share ...
- [cocos2d]场景切换以及切换进度显示
本文主要分两个部分叙述,第一是场景切换,第二是场景切换的进度显示. 一.场景切换 参考learn-iphone-and-ipad-cocos2d-game-development 第五章内容 coco ...
- cocos2d 场景切换和弹出场景、收回场景
场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...
- 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析
大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析
上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 ...
- 8 cocos2dx加入场景切换效果,控制场景切换彻底完毕之后再运行动画
1 加入场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadial ...
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析
上一章我们分析了Scene与Layer相关类的源代码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源代码. 直接看TransitionScene的定 ...
- Cocos2d-x 学习笔记(3.1) Scene 场景与场景切换
1. Scene 简介 游戏中我们看到/看不到的所有元素都是展示在场景之Scene上. 我们可以把场景比作放在地上的没盖纸箱,层Layer是纸箱里堆放的玻璃,Sprite等元素画在玻璃Layer上,这 ...
随机推荐
- Java特性-HashMap
想分享一个对HashMap的理解: 我们首先要知道一个HashMap对象的构成,一般的理解是:一个Map里面放了很多个键值对,合在一起就是一个键值对的数组: 大概这么理解没问题,可是有一点要说明一下, ...
- __attribute__((packed))作用
1. __attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关,g ...
- 【转】 Easy RadControl 之 RadGridView(Silverlight)
1.不显示第1列即列指示器(Row Indicators) 在 telerik:RadGridView中设置属性 RowIndicatorVisibility="Collapsed&qu ...
- 类似qq的左滑菜单栏简单实现
代码托管到了Github https://github.com/cyuanyang/YYSlideView 主演实现代码: 1.滑动的viewController的初始化主要view -(instan ...
- ad bga扇出 和群组布线
本文关于如何快速规范的bga布线和扇出做笔记 目的:layout一个ili的3+1的控制板.把线距控制在4mil 这样可以节约制造成本. 问题:需要大改布局.尤其是bga扇出和通道连接的问题. 细节: ...
- 【其他】win7创建wifi热点共享给手机使用
出门在外,有时候网络有诸多不便,需要用笔记本创建wifi热点给手机用:本人测试xp怎么配置都不好使,但win7有可行的方案,不依赖第三方软件. 详述如下: 场景一:win7 + A(PC机)(用无线连 ...
- apicloud 解析
function jiexi(id) { var getTabBarActivityUrl = '/QuestionReport?filter='; var urlParam = {}; ajaxRe ...
- Android实现Layout缩放动画
最近看到Any.do的缩放效果很酷,看到一篇讲Layout缩放动画实现的文章,记录一下: http://edison-cool911.iteye.com/blog/704812
- centos系列——1
今天开始好好学一下centos,下面记录全过程,以方便后来查阅. 开机后用户名为root. 忘记密码修改方法: 以GRUB 多系统引导程序启动,用GRUB引导系统进入单用户步骤:(1) 启动GRUB, ...
- css 修改滚动条
::-webkit-scrollbar { width: 10px;}::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgb ...