silverlight开发游戏中的大坑

最初做《金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这个字符串的时候就完蛋了。导致的客户端现象就是直接白屏,整个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机器下会访问出错!客户端看到的现象是莫名其妙的说SmartAssembly加密过期了。(也可能是我用的破解版,但是付费的话,实在不是有特别好的渠道啊,而且好像也不便宜。)

6、资源文件安全

不要以为将资源文件封装到dll里(Resource方式)就安全了,用Reflector照样一览无余。需要你自己写加密!

7、存档文件安全

在IsolatedStorage中,不管是自己创建的文件还是ApplicationSettings,都是不加密的。被篡改的风险很大,你需要自己做验证机制。

而且现在给silverlight用户最大的困扰是,360等清理缓存默认是将silverlight应用程序空间给勾上的,而现在大部分的用户都喜欢直接点默认清理缓存,会导致将你的IstolatedStorage下的东东全部清理,你需要务必给你的用户说明白这点,让他们将360里的设置勾给去掉。

silverlight开发游戏中的大坑,布布扣,bubuko.com

时间: 2024-10-10 02:25:54

silverlight开发游戏中的大坑的相关文章

【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像

内容简介 1.第三部分第三课: SDL开发游戏之显示图像 2.第三部分第四课预告: SDL开发游戏之事件处理 第三部分第三课:SDL开发游戏之显示图像 上一课中,我们学习了如何加载SDL库(SDL_Init),释放SDL库(SDL_Quit),如何打开一个窗口(Window),如何使用表面(Surface). 这些都是SDL库最最基本的操作.暂时,我们只会给窗口自带的表面上点颜色,好像挺乏味的. 这一课我们来学习如何插入图片.上一课我们说过,SDL中绘制图样需要在Surface上进行.Surfa

Silverlight开发工具汇总

Silverlight开发工具汇总 随着Silverlight技术的逐步完善,Silverlight应用大批的涌现,近期的2010年冬季奥运会,Silverlight作为首选视频播放技术,为全球提供在线赛事实况. Silverlight技术的发展需要更多的开发人员加入,作为Silverlight技术的支持者,我把平时Silverlight开发使用的工具进 随着Silverlight技术的逐步完善,Silverlight应用大批的涌现,近期的2010年冬季奥运会,Silverlight作为首选视频

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中应用很广泛的序列化技术Google的ProtoBuf,所以本文也是按照ProtoBuf的方式来操作的.ProtoBuf是一个开源库,简单来说ProtoBuf就是一个能使序列化的数据变得更小的类库,当然这里指的更小是相对的.好了ProtBuf的东西就不在多说,以后会专门写一篇帖子的.本帖其实就相当于上

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其实这样到游戏中还是不能用的.主要有两个方面,1.bin文件的后缀使我们随便取的名字,但是这种文件Unity不买账.因为Unity中的二进制文件必须是以.bytes命名的.2.在写文件之前其实还可以对二进制进行压缩,这样可以最大化节省设备空间.也就是说我们在生成数据实例后还需要做以下几件事:序列化 -

详解 C 语言开发五子棋游戏以及游戏中的重要算法与思路

重拾 C 语言之后发现,原来 C 语言是那么的简洁,对于写小项目来讲,C 语言是那么的合适,然后,博主自己写了一个五子棋游戏,同样是基于博主自己封装的 nkCEngine 代码库编写,其实整个游戏里面大部分代码都用在逻辑处理上了,图形处理以及窗口创建的部分,因为有高度封装的 nkCEngine,基本上可以忽略不计,这篇博文来讲一讲 C 语言开发一个简单的五子棋游戏,这个游戏不包含人机对战的逻辑,所以唯一的难点估计就是在于如何判断下棋的一方在下棋时候是否获胜了,同时博主也会介绍一个游戏开发中最经常

【Cocos2d-x游戏开发】浅谈游戏中的坐标系

无论是开发2D还是开发3D游戏,首先必须弄清楚坐标系的概念.在Cocos2d-x中,需要了解的有OpenGL坐标系.世界坐标系和节点坐标系.  1.UI坐标系 IOS/Android/Windows SDK中通用的UI坐标系默认起点坐标(x=0,y=0)位于坐上角,x轴从屏幕最左边开始,由左向右逐渐增加:Y轴坐标从屏幕最上方开始,由上至下逐渐增加,如图所示: UI坐标系又被称为纹理坐标系,在Cocos2d-x中,只有从纹理截取部分矩形时才使用这个坐标系,例如Sprite的TextureRect属

Unity 2D游戏开发教程之游戏中精灵的跳跃状态

Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却无法从低的地面移动到高的地面,因为当前的游戏精灵只能左右移动,即left和right.为了解决这个问题,本节就来为精灵添加跳跃状态.   图2-14  精灵从一个地面移动到另一个地面 (1)如果要为精灵添加跳跃状态,即jump,就不得不再引入其它状态: q   landing:用于表示精灵接触到地面

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一)

引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键,各种插件,各种函数.但是作为程序来说其实管住的不是Excel而是它最终形成的数据,而在程序中数据其实就是二进制,比如说一个int型就是4个byte,一个字母占2个byte.但是游戏中不可能把excel文件放进去(因为Excel本身就会占一部分额外的空间),也不可能把处理Excel的类库打包到程序,所以现在大多是对Excel进行读取然后将数据进行序列化并写入文件再打包,程

【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!

[COCOS2DX-LUA 脚本开发之一]在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途! 分类: [Cocos2dx Lua 脚本开发 ] 2012-04-16 10:08 30803人阅读 评论(18) 收藏 举报 游戏脚本luaanimationpython 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/681.htm