最初做《金X》使用silverlight它是由于右手锯的深蓝色silverlight游戏开发教程,在这里,好评,写得很好的教程!基于这样的思想游戏覆盖。你可以给游戏开发商新提供的非常多的思维方式指导。
但在我个人发展、金宣布X在过程中。陆续发现有一些silverlight的大坑。这里给大家分享一下,防止大家犯反复错误。
1、DateTime数据结构的处理
在游戏中,假设想使用DateTime数据结果来存时间的话。一定要慎用DateTime.ToString和DateTime.Parse方法。在不同的windows机器下,非常可能出来的结果不是预想的那样。原因是每台windows的机器的时间格式是能够配置的。那么ToString和Parse方法默认使用的时间格式是与操作系统设置相关的。而有一些恶心的所谓操作系统优化程序,把操作系统时间格式从标准的yyyy-mm-dd hh:MM:ss改为了如“星期X”这样。
导致的问题就是,调用DateTime.ToString()后,转出来会把年月日时分秒信息所有丢掉。而仅仅剩下“星期X”的数据,之后再调用Parse这个字符串的时候就完蛋了。导致的client现象就是直接白屏,整个silverlight应用程序崩掉。
所以在使用 DateTime的时候,务必须要指定时间格式。
使用DateTime.ToString("{时间格式}") 和DateTime.ParseExact方法。
2、Button等控件的IsTabStop属性
假设在游戏中使用各种silverlight原生控件,然后有一堆界面使用Visibility来实现隐藏和展示的话。建议将全部控件默认的IsTabStop属性给干掉,否则会出现的问题是,一个界面隐藏掉了,玩家按空格或者回车等键的时候,会触发Button的Click事件或者其它控件的各种响应事件。出现不必要的逻辑。
3、字体、字体库
不要以为使用默认字体就会万事大吉。
silverlight的默认字体会使用Lucida Sans Unicode,而在非常多盗版或者阉割下的windows下,这个字库都被删了,导致的问题是直接白屏。应用程序崩溃。
眼下我的应用程序使用的默认字体是SimHei,会略微少见缺字库的问题。假设应用程序包的大小不敏感,还是能够默认把字库带到XAP包里。
4、关于Dispatcher.BeginInvoke
新手会用上瘾。原因是能够解决非UI线程操作UI的问题。所以新手会无论三七二十一,全部地方须要涉及操控UI控件的的都用。
实际上须要理解一下这个函数的原理,实际上我对它的理解就是把一段代码托管到下一帧渲染的回调来执行,所以这里会有一帧的延迟。那么在你的游戏逻辑里,可能导致的现象会是屏幕闪烁,或者会导致游戏逻辑不必要的错误。
比方你写物品栏的逻辑,当用户点击一个物品时。隐藏物品栏而且使用该物品。假设你把隐藏物品栏的逻辑放到BeginInvoke里。那么可能导致的错误是用户在这一帧结束前疯狂点击这个物品,那么会触发很多次使用物品……诸如此类错误,均须要注意。
你应该仅仅在非UI线程操作UI的时候使用这个函数。切忌乱用。
5、代码安全
不做不论什么安全的XAP包是全然裸体呈现给玩家的。出于安全考虑,你须要做代码混淆。
眼下算好用的一个工具是 SmartAssembly(出Reflector的公司出的)。可是它可能会有致命问题:加密后的XAP包在某些windows机器下会訪问出错!client看到的现象是莫名其妙的说SmartAssembly加密过期了。(也可能是我用的破解版,可是付费的话,实在不是有特别好的渠道啊,并且好像也不廉价。
)
6、资源文件安全
不要以为将资源文件封装到dll里(Resource方式)就安全了。用Reflector照样一览无余。须要你自己写加密!
7、存档文件安全
在IsolatedStorage中。无论是自己创建的文件还是ApplicationSettings。都是不加密的。被篡改的风险非常大,你须要自己做验证机制。
并且如今给silverlight用户最大的困扰是,360等清理缓存默认是将silverlight应用程序空间给勾上的,而如今大部分的用户都喜欢直接点默认清理缓存,会导致将你的IstolatedStorage下的东东所有清理。你须要务必给你的用户说明确这点,让他们将360里的设置勾去除。
版权声明:本文博客原创文章,博客,未经同意,不得转载。