项目总结之游戏前黑
来源:互联网 发布:ghost love score 知乎 编辑:程序博客网 时间:2024/06/09 17:26
项目总结之游戏前黑
DionysosLai(906391500@qq.com) 2014/11/20
问题引入:
项目后期,之前没关注的几个细节一个一个被提到案前,其中一个就是关于游戏前黑问题。
什么是游戏前黑问题呢?就是一启动游戏,总有一段时间处于黑屏状态,这个黑屏时间跟一般比较短(这个前提是优化过游戏第一个场景代码)。另一个方面,黑屏时间跟系统有关,有时系统运行流畅,前黑时间短,有时系统卡顿,可能就要求比较多的时间。
从一些应用商场上下载了一些应用,逐一观察各个游戏运行情况。情况如下:《2048》游戏没有游戏前黑问题,《Dota传奇》存在游戏前黑问题、《剑无生》游戏没有游戏前黑问题等。后来又发现,大部分使用cocos2dx引擎制作的游戏基本都有游戏前黑问题(除了一些做了特殊处理游戏,这个特殊处理也就是我们要探讨的方法),至于其他一些使用其他引擎制作的游戏,就不一一而论了。
这个问题当时分析了好久,一直没有好的解决方案。从最开始的cocos2d源代码分析,到后面opengl渲染等等。查看了各个方面,还是没有找到解决方案,只是提高了速度,或者将黑屏改成白屏等其他非正统的方法。直到一次在探讨JNI使用方法时,不小心更改了主题方案,才树藤摸瓜的解决了游戏前黑问题。
问题解决:
解决游戏前黑问题,有两个问题必须要注意一下:
1. 场景资源创建、加载处理:
这里的场景指的是的游戏第一个运行的场景,也就是在文件AppDelegate.cpp中运行(runWithScene)的场景。这是游戏第一次呈现在用户面前的场景。在这里一些背景图片等精灵的创建位置,尤为注意。一般来说我们游戏的第一个场景是一个loading界面,在这个场景中,所需的资源很少。因此,一般做法是,在init函数中不做任何事情。在onEnter中,创建一个公司logo图标,这个图标如果太大,就不能再在这里创建了,否则会有问题出现,待会儿细说。然后创建一个延时0.1s再执行的函数,在这个函数中,在处理你资源加载、精灵创建等活动。
一般来说,如果在onEnter中做太多事情,会有一些问题,这些问题,跟你选择Android主题有关。
2. Android Theme主题选择:
目前只做Android,因此先只探讨Android方面问题。关于Android Theme的相关知识,在网上有大量相关资料。比方网站:http://blog.sina.com.cn/s/blog_63dcd56c01011s8j.html,列举相关信息:
android:theme="@android:style/Theme.Dialog"将一个Activity显示为能话框模式
android:theme="@android:style/Theme.NoTitleBar"不显示应用程序标题栏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"不显示应用程序标题栏,并全屏(游戏使用较多)
android:theme="Theme.Light"背景为白色 (这种是eclipse默认使用的主题)
android:theme="Theme.Light.NoTitleBar"白色背景并无标题栏
android:theme="Theme.Light.NoTitleBar.Fullscreen"白色背景,无标题栏,全屏
android:theme="Theme.Black"背景黑色
android:theme="Theme.Black.NoTitleBar"黑色背景并无标题栏
android:theme="Theme.Black.NoTitleBar.Fullscreen"黑色背景,无标题栏,全屏(游戏中使用的较多)
android:theme="Theme.Wallpaper"用系统桌面为应用程序背景
android:theme="Theme.Wallpaper.NoTitleBar"用系统桌面为应用程序背景,且无标题栏
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen"用系统桌面为应用程序背景,无标题栏,全屏
android:theme="Translucent"半透明
android:theme="Theme.Translucent.NoTitleBar"半透明,无标题
android:theme="Theme.Translucent.NoTitleBar.Fullscreen"半透明,无标题,全屏
除了前面的三个,后面的都要自己加上@android:style/。
下面,就是重点的啦,这里原先设置的主题是:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen",
将其改为
android:theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscren"
注意,就是这里的主题风格更改了,游戏前黑问题就完美解决了。至于两者主题有什么不同,可以自己去分析下。
现在,回顾前面一个问题说,在如果在onEnter中做太多事情,会有一些问题,这个就跟你选择的主题有关,就像我们这里选的Theme.Wallpaper.NoTitleBar.Fullscreen主题,如果做太多事情,那么原来是点击图标,画面平铺展开(跟iphone里一样)将变成一下子就出现全部场景,没有渐进过程。
Ok,大概游戏前黑问题,分析到这里就差不多了。希望对大家有用。
- 项目总结之游戏前黑
- 项目总结之优化游戏包大小
- QuickHit游戏项目总结
- 前后端交互项目总结
- 【MFC三天一个游戏】之 局域网黑白棋
- unity之游戏总结
- cocos2d-x游戏项目总结
- H5游戏项目开发总结
- QuickHit游戏开发项目总结
- 项目总结(游戏前端时间)
- 62 第一个项目上线前总结
- 黑白棋游戏
- 黑白棋游戏
- iOS 黑白棋游戏
- UVa220 黑白棋游戏
- codevs2743 黑白棋游戏
- 黑白棋游戏程序
- 【9801】黑白棋游戏
- (一) GIT BASE
- Git 快速入门
- 电子通讯录(C语言)
- Copy List with Random Pointer
- Go 程序的性能调试问题 - 内存篇
- 项目总结之游戏前黑
- SqlHelper的使用
- String,StringBuffer与StringBuilder的区别??
- Linux运维工程师:30道面试题整理
- jQuery验证控件jquery.validate.js使用说明+中文API
- HBase 管理,性能调优
- \r \n有什么区别
- unhandled exception in XXX:0xC0000005:access violation问题
- Java: 复制文件最快方法