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上,这 ...
随机推荐
- memcpy函数用法
memcpy函数用法 .分类: VC++ VC++ mfc matlab 2011-12-01 19:17 14538人阅读 评论(0) 收藏 举报 null 原型:extern void *memc ...
- Java特性-HashMap
想分享一个对HashMap的理解: 我们首先要知道一个HashMap对象的构成,一般的理解是:一个Map里面放了很多个键值对,合在一起就是一个键值对的数组: 大概这么理解没问题,可是有一点要说明一下, ...
- css3旋转
首先创建一个容器如div,然后设置其相关的3d属性,主要是三个1.perspective 透视,值越小3D感越强,值越大视觉正常.2.perspective-origin,透视点一般居于容器的中心.3 ...
- DotSpatial 创建面状要素——含空洞
private void toolStripButton23_Click(object sender, EventArgs e) { //选择图层 FeatureSet fs = null; fs = ...
- 利用border-radious画图形
今天才发现,border-radius可以画很多图形,下面跟我来看一下吧: 在设有宽和高的情况下画一个圆: #div1{ /*宽高相等,圆角范围为高或宽的一半或以上*/ background-colo ...
- loadrunner关联和事务
1.关联 不关联,录制没有问题,回放时可能会出错. 排除字符限制,输入因素,如果自己手动操作网页时不会报错,回放时报错,那么可以肯定,有数据需要使用关联. 如果录制没有错误,且对脚本没有进行任何修改, ...
- Android Soap实例
// 指定命名空间 private static final String NAMESPACE = "http://WebXml.com.cn/"; // 给出接口地址 priva ...
- AC中保存数据与查询数据
//保存数据 hui.ajax(function (ret, err) { }, url, {values: {t:"test",m:"Search",c:&q ...
- UIKit框架之UIEvent
1.继承链:NSObject 2.事件大致可以分为三种事件:触摸事件.动作事件.遥控事件 3.获取事件的touches (1)- (NSSet<UITouch *> *)allTouche ...
- Pyhon环境搭建-window
1.安装python3.4.3版本 地址:(64位)https://www.python.org/ftp/python/3.4.3/python-3.4.3.amd64.msi (32位)http:/ ...