什么是引擎
引擎是使用素材,响应用户输入,处理简单运算、调用远程数据的程序集。在虚拟实验室里,引擎负责调用图片素材、渲染场景、接收用户鼠标点击事件、相应事件,以及和后台通信:
这就像网络游戏的引擎一样。网游的引擎集成在Client客户端中,利用DirectDraw或Direct3D来渲染素材,利用DirectInput和鼠标键盘交互,利用Socket和游戏服务器进行数据传输。
虚拟实验室引擎类似于传统CS架构下网游的引擎,但是又有着不同:虚拟实验室是基于BS架构的,客户端嵌入在网页中,我们通过在浏览器中输入网址来访问它。
使用什么语言
嵌入在网页中的对象有很多中,我们该用哪种语言来开发虚拟实验室引擎呢?
ActiveX或Applet
也许你会选择ActiveX这个“爷爷”级的技术,没错,它很快,部署很方便,市面上关于这方面的书海了。此外,可以使用C++来实现,对“唯性能论”者来说基本上是最好的选择。不过我却不喜欢:ActiveX太老了,在上面绘制一副图片都需要写一大段代码,更别说制作出绚丽的效果。这个世界,性能固然重要,不过可以通过硬件升级来获得相应提高,不过如果效率太低的话,估计是没得救了!
至于Applet,参考ActiveX。我想,即使是James Gosling也不会用来编写网游引擎吧。
Javascript
Web进入到2.0时代,Javascript这个原本几乎被人们遗忘的东西仿佛一夜春风,又出现在人们的视野中。各种Javascript框架仿佛雨后春笋般冒了出来,现在互联网上已有了不少利用Javascript制作的游戏。和ActiveX相比,Javascript不需要安装,跨浏览器,跨平台。开发简单,部署方便,甚至不需要下载安装任何插件。
不过我依旧没有选择Javascript作为引擎开发语言,因为它太灵活,缺乏面向对象原则,根本不适合我这种“死板”的人。另外,Javascript缺乏良好的开发环境和测试环境,也是我放弃的原因。
Flex
作为Adobe收购Macromedia后主推的一门RIA技术,Flex继承了Flash的全部优点。同时,ActionScript 3.0还是一门面向对象的语言,至少让我在使用上非常顺手。Flex最大的优点就是能和Flash编译生成的SWF文件无缝拼接在一起,简直就是太强大了!现在市面上关于Flex的教程也渐渐多了起来。
去年我曾用Flex制作了一个虚拟商城的引擎,对Flex有了一定的了解。如果本引起还是用Flex来完成,未免有重复劳动的嫌疑。再加上学习了一段时期的Silverlight后,我不可遏制地喜欢上了后者。虽然Flex同样强大,不过,有时候,开发就像恋爱一样,感觉很重要。
Silverlight
作为微软主推的RIA技术,Silverlight一出来就被拿来和Flex对比。二者相似的地方不说,我觉得和Flex相比,Silverlight有以下两个吸引我的地方:
- C#:没错!和ActionScript那个四不像相比,C#是我在RIA领域中使用过最优雅,最具魅力的语言。(JavaFX没用过)
- Visual Studio:这个毫无疑问。Visual Studio 2008在易用性上比Adobe的Flex Builder 3好很多。对我来说,开发同样效果的东西,Silverlight比Flex快了足足一半。
当然,Silverlight毕竟刚起步,和Flex相比,还有很多东西实现起来比较麻烦,比如不能直接打开摄像头,缺乏像Flash那样强大的美工软件与之相结合。不过,这里我依然要套用郭富城的一句广告词:因为难,才好玩。结果,重要吗?
工欲善其事
既然选用了Silverlight,我们就必须知道,Silverlight能干什么,不能干什么。只有知己知彼,才能百战不殆。
Silverlight能干什么
- 使用面向对象的语言进行开发(c#)
- 在浏览器端呈现良好的UI界面
- 全屏
- 读取服务器图片素材
- 使用Socket连接服务器
- 使用Http连接服务器(WCF)
- 绑定对象
- 进行简单的运算(例如A*寻路)
- 多线程
- 良好的XML支持(使用XElement)
Silverlight不能干什么
- 直接读取数据库(必须通过服务器中间层)
- 身份验证(必须通过ASP.NET身份验证模式来验证身份及授权)
- 调用摄像头
- 在没有安装Silverlight的客户端上运行
进一步学习
关于Silverlight的教程,可以参考TerryLee的文章:一步一步学Silverlight 2系列文章。
以及Tony Qu的写于Silverlight整装待发之际。