最近在用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 帧循环不严谨造成场景切换卡顿的更多相关文章

  1. 4.帧循环(游戏循环),schedule

     1 概述 游戏乃至图形界面的本质是不断地画图,然而画图并非任意的,不论什么游戏都须要遵循一定的规则来呈现出来,这些规则就体现为游戏逻辑.游戏逻辑会控制游戏内容,使其依据用户输入和时间流逝而改变. ...

  2. cocos2dx中帧循环的伪代码实现

    1.在游戏开发中,帧率很大程度上体现了游戏的流畅度,帧循环是游戏中一个很重要的概念 2.下面用伪代码实现了cocos2dx中的帧循环 /*main函数调用*/ CCApplication::share ...

  3. [cocos2d]场景切换以及切换进度显示

    本文主要分两个部分叙述,第一是场景切换,第二是场景切换的进度显示. 一.场景切换 参考learn-iphone-and-ipad-cocos2d-game-development 第五章内容 coco ...

  4. cocos2d 场景切换和弹出场景、收回场景

    场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...

  5. 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析

    大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...

  6. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析

    上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 ...

  7. 8 cocos2dx加入场景切换效果,控制场景切换彻底完毕之后再运行动画

     1 加入场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadial ...

  8. Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源代码分析

    上一章我们分析了Scene与Layer相关类的源代码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源代码. 直接看TransitionScene的定 ...

  9. ‎Cocos2d-x 学习笔记(3.1) Scene 场景与场景切换

    1. Scene 简介 游戏中我们看到/看不到的所有元素都是展示在场景之Scene上. 我们可以把场景比作放在地上的没盖纸箱,层Layer是纸箱里堆放的玻璃,Sprite等元素画在玻璃Layer上,这 ...

随机推荐

  1. VMware下利用ubuntu13.04建立嵌入式开发环境之一

    1.软件准备: (1) VMware网上很多,需要根据自己的需要选择,这里选用的VMware Workstation 9. (2)ubuntu  操作系统,同样根据自己的需要下载系统安装包.这里我选择 ...

  2. Android内存优化之 LruCache与DiskLruCache

    在日常的Adroid开发中我们经常遇到需要处理大量图片的地方,但Android手机的内存有限该怎么避免手机 内存溢出导致app程序oom,google提供了两种解决方式 LruCache LruCac ...

  3. Windows 8.1 with Update MSDN 简体/英文/繁体

    PS:请不要使用离线下载,以免镜像损坏! 1.CN: 文件名:cn_windows_8.1_enterprise_with_update_x64_dvd_4048578.isoSHA1:2D9BFE9 ...

  4. Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

    ---恢复内容开始--- 20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10 ...

  5. 关于在工程中添加新文件时的LNK2019错误的一个解决办法

    我这几天一直在研究Qt的串口程序,在读懂了官方给出的实例程序后我决定把其多线程的串口监视程序加入到我自己的工程中,便直接把问价复制到自己的工程下面,在Qt中加入到自己的工程中,但是总是出现LNK201 ...

  6. Ubuntu14.04安装build-essential失败,包依赖问题如何解决?

    正在读取软件包列表... 完成 正在分析软件包的依赖关系树        正在读取状态信息... 完成        有一些软件包无法被安装.如果您用的是 unstable 发行版,这也许是 因为系统 ...

  7. Android Studio安装插件GsonFormat

    Android Studio菜单栏File > Settings > plugins' 这个是Android Studio搜索和安装插件的界面,下面直接上动图 : 安装结束后需要关闭重新启 ...

  8. ASP.net页面代码执行顺序

    <%=TextBox1 .Text%> <asp:TextBox ID="TextBox1" runat="server">abc< ...

  9. Angularjs select的使用

    实例一:基本下拉效果 usage: label for value in array <!-- lang: html --> <select ng-model="selec ...

  10. IBM Domino 9 出现 Server Controller 未在主机上运行或未在端口2050监听 解决方案

    如果在网上搜索的方法,比如防火墙开端口还没有解决的话,那么我的解决方案可能会解决你的问题. 出现的场景: 我先装了Notes,Designer,后装Domino Server, 配置Domino服务器 ...