cocos2d-x android黑屏后返回游戏卡顿
转自:http://blog.csdn.net/wolfking_2009/article/details/8824931
2013年5月17日更新:对于之前说的资源释放问题,cocos2d-x 2.1.3已经解决,就是说中断之后不释放资源,估计方法跟之前提到的差不多,我没有仔细研究过....
在调试的过程中发现,如果中断处理的时候,让游戏显示暂停界面,方法不当有可能会出问题,本人就遭遇了,返回时直接退出游戏,或者不显示暂停界面的问题。后来发现如果创建的暂停界面层,在AppDelegate::applicationDidEnterBackground方法里创建会没有问题~如果在AppDelegate::applicationWillEnterForeground()方法里创建就有可能出现如上问题~
再来说下声音中断~其实声音中断有个比较魂淡的地方,就是声音中断时,可以直接stop,返回时再play,但是android上发现恶心的问题,就是游戏的时候直接点电源关掉屏幕,再返回的时候,在锁屏界面,游戏就又继续了,意思是锁屏界面就已经调用AppDelegate::applicationWillEnterForeground()~机制问题没办法,还没有想到解决办法~
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
今天在android手机上测试游戏声音的中断,发现比较恶心的事情是,中断完返回游戏后,发现游戏长时间卡顿~
网上翻帖子~发现是游戏资源被释放掉了,回来的时候要重新加载~群里有大侠说是CCTextureCache的原因~
用ios测试了下,发现没有问题,然后开始找CCTextureCache的问题了~发现了一个宏
/** Reload all textures
    It's only useful when the value of CC_ENABLE_CACHE_TEXTURE_DATA is 1
    */
    static void reloadAllTextures();
显然跟CC_ENABLE_CACHE_TEXTURE_DATA 这个宏有关。
找到源头,发现
/** @def CC_ENABLE_CACHE_TEXTURE_DATA
Enable it if you want to cache the texture data.
Basically,it's only enabled in android
It's new in cocos2d-x since v0.99.5
*/
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    #define CC_ENABLE_CACHE_TEXTURE_DATA       1
#else
    #define CC_ENABLE_CACHE_TEXTURE_DATA       0
#endif
好嘛~只有android的使用了这个宏~
关闭之,测试,哭了,回去后黑屏~
继续翻贴,发现
//原帖内容如下:
返回Android游戏黑屏解决办法
这几天逛cocos2d-x.org论坛,发现cocos2d-x的作者放出来一个帖子,用来解决返回Android游戏加载资源时黑屏的问题。帖子过些日子估计就沉了,所以转出来,以供后面查询。
需要修改三个文件:
1) cocos2dx/platform/CCPlatformMacros.h
将Line84修改为 #define CC_ENABLE_CACHE_TEXTURE_DATA 0

2)cocos2dx/platform/android/java/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java
注释掉Line167。

3)android工程目录下jin/hellocpp/main.cpp
注释掉Line32~43。

基本原理就是在activity进入后台后,不清除texture缓存,这样在activity回到前台后,不需要重新load资源。
我在自己的游戏上试了一把,修改之前切回游戏需要4秒左右时间,修改后不用1秒,可谓瞬间完成。
不过这个解决方案有些小问题,当有其他surfaceView的activity,比如集成了Admob广告后,切回来时只能看到广告,而不显示游戏画面。有个老外Pablo Tonello回复帖子说没有集成Admob也遇到了这种情况。目前还不知道是啥问题,有待慢慢研究。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这个帖子倒是解决问题了,不过瞧那意思插入其他的SDK可能还有问题~
待解决吧
还有个帖子是说做个load界面来显示,以遮住卡顿~~~~~~~~~~~~
帖子地址:http://blog.csdn.net/yanghuiliu/article/details/7362019
如果有更好的办法,麻烦告诉我一下~THX
cocos2d-x android黑屏后返回游戏卡顿的更多相关文章
- android灭屏后调用binder通讯竟然影响了socket的POLL_OUT事件,怪事。
		
当你的android在灭屏(休眠)时分派(dispatch) Ice调用过程中,如果创建了新的进程,你的响应将不会预期那样工作,尽管你已经调用 ice_response或 ice_exception, ...
 - 如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
		
有些Win10系统的用户反映电脑在开机的时候突然变成黑屏,还出现提示0xc0000225的错误代码,不知道该怎么去解决.一般来说,遇到这种情况一般是系统的注册表出现了问题.下面就为大家分享一下相应的解 ...
 - 4.Android App 优化之消除卡顿
		
转载:http://gold.xitu.io/post/582583328ac247004f3ab124 1, 感知卡顿 用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI ...
 - android 特卖列表倒计时卡顿问题
		
在Android的开发中,我们经常遇见倒计时的操作,通常使用Timer和Handler共同操作来完成.当然也可以使用Android系统控件CountDownTimer,这里我们封装成一个控件,也方便大 ...
 - Android ScrollView嵌套Recyclerview滑动卡顿,松手即停问题解决;
		
假如你的布局类似这样的: <ScrollView android:layout_width="match_parent" android:layout_height=&quo ...
 - Android fragment 切换载入数据卡顿问题
		
接着上一篇项目的进度.上一篇讲了怎样利用fragment来实现下拉菜单.公用菜单,以实现切换主界面数据的功能,这时候遇到的问题是:使用了fragment的切换界面方法.但载入的数据太多.用户从一个界面 ...
 - Android 布局渲染流程与卡顿优化
		
文章内容概要 一.手机界面UI渲染显示流程 二.16ms原则 三.造成卡顿的原因 四.过度绘制介绍.检测工具.如何避免造成过度绘制造成的卡顿 一.手机界面UI渲染显示流程 大家都知道CPU(中央处理器 ...
 - iOS 添加阴影后 屏幕卡顿 抖动
		
- (void)awakeFromNib { // Initialization code _btnViews.layer.shadowPath =[UIBezierPath bezierPathWi ...
 - ios UICollectionView 加载数据后 滑动卡顿问题
		
最近项目的资源图片变大了,滑动时总是卡顿,在这里用NSOperationQueue解决了一下 .h 文件 @interface CollectionViewCell : UICollectionVie ...
 
随机推荐
- vs2012 Silverlight项目签名报错异常的处理方式
			
项目刚生成为vs2012,原先的Silverlight项目,点击签名,竟然有问题,给上个截图 悲剧了,没有签名证书,就无法实现自动更新,想着vs2012可能几个更新没有安装吧,但是自己手动下载竟然一两 ...
 - IOS公司开发者账号申请详细教程
			
谈到苹果开发者账号,我们需要区分一下个人账号.公司账号和企业账号这三种,还有一种是教育账号,这个就不多说了. 个人账号:个人申请用于开发苹果app所使用的账号,仅限于个人使用,申请比较容易,$99. ...
 - 热门Web开发方式 REST实现原理浅析
			
REST 首先只是一种架构样式,不是一种标准.这点和 Ajax 类似,两者都是利用现有的成熟技术.在 REST 的定义中,一个 Web 应用总是使用固定的 URI 向外部世界呈现(或者说暴露)一个资源 ...
 - 对于REST中无状态(stateless)的一点认识
			
今天早上在Yahoo的邮件列表里看到一篇颇有意思的讨论,标题为RESTful vs. unRESTful: Session IDs and Authentication(51CTO编者注:意为REST ...
 - Eclipse的SVN插件安装
			
两种方法: 首先下载安装到eclipse的svn插件包,包里会有“plugins”和“features”两个文件夹,安装时要用到. 1.然后找到eclipse目录下的同名文件夹“plugins”和“f ...
 - Nodejs_day04
			
Nodejs模块系统 1.如何创建一个模块 创建一个js(hello.js) exports.world = function(){//为什么可以这么写,因为exports是nodejs公开的借口 c ...
 - Java中的路径问题
			
Java中的路径问题 代码说明,如下: package com.merlin.test; import java.io.InputStream; public class Test { public ...
 - 30+学习Web设计和开发的优质新鲜资源
			
今天我们整理了一些最新的Web设计和开发的资源,这些资源都来自国外的流行站点,不过大家应该不会陌生,放在这里供大家收藏,在需要的时候方便翻阅和学习! 原文地址:http://www.goodfav.c ...
 - 验证dictionary重复键
			
if (dict.ContainsKey("sadsa")) { }
 - c# spring aop的简单例子
			
刚刚完成了一个c#的spring aop简单例子,是在mac下用Xamarin Studio开发的.代码如下: 接口 using System; using System.Collections.Ge ...