项目总结之游戏前黑

来源:互联网 发布: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,大概游戏前黑问题,分析到这里就差不多了。希望对大家有用。

0 0
原创粉丝点击