2013年12月9日星期一

818这些年我所遭遇过的游戏中间件 - 叶飞影

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
818这些年我所遭遇过的游戏中间件 - 叶飞影  阅读原文»


818这些年我所遭遇过的游戏中

生活中总有些之前从没想过的东西,却出现在自己以后的生活中.比如,上中学时我从没想过自己能上大学.在学校时多次路过一家公司,看它的大楼很是个性,从没想过自己毕业后会坑在这家公司.第一次听说中间件,是我读研时的一个舍友,他的研究方向就是中间件.我问他什么是中间件,他滔滔不绝地讲了一大坨我听不懂也记不住的话.没想到我工作之后却和中间件有着难解之缘.什么是中间件,百度上的解释如下:
"中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。"
上述语句我也看不懂,因为这不是我所搞的中间件,大概是我那舍友所搞的中间件吧.还有另外一种中间件,百度上的定义如下:"中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。"这个定义意思上大概差不多有那么点合乎我的理解.我对中间件的定义是:为编程中某一功能提供具体实现的软件开发工具包.中间件和SDK差不多是一个东西."软件开发工具包(Software Development Kit, SDK)一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合." 它或许只是简单的为某个程序设计语言提供应用程序接口的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。

中间件是由第三方为实现某一功能开发的,较为成熟并且可复用的lib库或dll库.开发者可以通过其提供的接口来实现其功能.中间件所实现的功能有多有少,其复杂程度有大有小.复杂的如一些游戏引擎:osg,ogre.简单的如一些图像格式解析的库,jpglib,pnglib.其特点就是可以嵌入其他的程序中.之所以定义它为中间件是因为,它不是具体的执行程序,无法执行,但它为具体的执行程序提供服务.好吧,按照我的定义,中间件和软件开发工具包就是一个东西.通常我们将一些比较低层的东西叫做软件开发工具包,如openGL,D3D,openCL,也会把一些功能全面又复杂的东西叫软件开发工具包,如:VTK,ogre,osg.而中间件则多指功能具体而且单一的东西,如:用于物理的Havok,PhysX,Bullet,用于界面的Scaleform,用于人工智能寻路的Kynapse,Navigation.
这种中间件并不是处于操作系统与应用软件的中间,而是处于开发环境与开发程序之间.如果要问"STL算中间件吗?",我更倾向于它属于开发环境的一部分.但如果你又写了一套STL,并发布出去,这就算是中间件了.

你若是问我:"中间件靠谱吗?",我会毫不犹豫地回答:"靠".一方面,中间件为开发者提供现成的功能,我们可以简单调用其接口实现一些很复杂的算法.但另一方面,中间件大多不开源,开源的又大多看不懂,一旦出有问题或有了新需求将很难维护.总之,中间件在降低开发成本的同时,会提高维护成本.你可能只需要花几星期或是几天写出一个看上去很有技术含量的DEMO,但当将这个DEMO移植到具体的游戏中时,总会出现这样那样的问题.Shit often happens.几乎所有我遭遇过的中间件都会有奇葩的事情出现.而这些出现问题中,大约三分之一能得到完善解决,有三分之一可以通过别的方式绕过去,剩下的就只能将就着用吧.有时会发现某款中间件就如同鸡肋,欲罢不能,欲进无力.然而有些东西我们只能用中间件来解决,例如物理,这个要独立开发的话,坑实在是太大了.

下面的将所有我遭遇过的游戏中间件列举出来,然而未来的日子里打算将对每一款都写个小文章,记录下自己的亲身经历.

(1)VTK:一款图形开发包.
(2)Havok:物理中间件.
(3)Speedtree:用于场景植被渲染的中间件.
(4)Physx:物理中间件.
(5)Scaleform:用于Flash界面的中间件.
(6)FlashLib:原装用于Flash界面的开发包.
(7)Kynapse:用于人工智能的中间件.
(8)HumanIK:用于反向动力学的中间件.
(9)Substance Redux:用于纹理压缩与合成的中间件.
(10)dxtlib:用于DXT格式转化,DDS文件生成的开发包.
(11)Bullet:物理中间件.


本文链接:http://www.cnblogs.com/WhyEngine/p/3467206.html,转载请注明。

Sencha Touch学习使用心得 Unit 1 - 高克吉  阅读原文»

本文献给那些看不懂官方API,接着又被网上被转载N遍的论文折磨N遍的苦逼的程序猿们。

事先声明:由于本人做线上webapp,所以本文不包括打包操作。如phonegap等JAVA操作.

由于Sencha Touch主要使用的是MVC模式,所以本文直接以MVC模式开始我们的路程。个人认为不应用MVC模式的Sencha Touch是没有意义的,况且从MVC学习ST的话更为系统化。简单,易懂,高端,大气,上档次!前提你要知道MVC模式.

Chapter 1:搭架构

   创建Web工程,添加SenchaTouch类库,不用非要按部就班的CMD创建工程,因为就算创建出来了对于初学者来说也不明白,所以对于初学者来说一步一步搭建SenchaTouch项目的框架是比较有好处的。下图是对SenchaTouch一个比较干净的引用。作者只用到了官方提供的CSS样式如官方样式表、苹果样式表、安卓样式表、黑莓样式表(日后应该会有WP7)很强大,直接link,就可改变全局风格。注意到了么,工程中有一个Index.html,我们要拿这一个页面实现所有项目内页面的实现,可能现在有些蒙,但看完下文你就会明白,这就是SenchaTouch的强大之处(Extjs也可以吧)。(额外提一点:不管是学习新东西还是遇到阻碍,切记要坚持,可谓锲而不舍,金石可漏。说不定你就突然开窍了)

    Index.html里只引用三个文件.app/app.js文件下面讲解

    HTML的声明要写成<!DOCTYPE HTML>,这才是HTML5的声明.(不知道SenchaTouch是基于HTML5的就悲剧了)


Chapter 2:了解MVC(核心)

    此MVC是由JS编写的纯JS MVC。之前有人问过我,居然不知道,惭愧之极。JS MVC编写比较困难的地方就是全部文件都需要自己编写(类似MVC引擎吧HTTP机制),不过看清之后还是比较简单的,毕竟和ASP.NET MVC架构还是差的比较多的.坑爹Framwork老更新,无奈上了不归路,学无止境啊.

    说了是MVC嘛,要有一个入口文件(route),开始编写app/app.js文件.脑子里想着OPP就好了.加载视图,控制器(全部),实体(全部),数据源(全部)。视图可以只预加载应用程序启动时的特定页面,其他页面可以在控制器里按需创建加载。其他必须全部预加载。如引用的是Sench-touch-all.js,View中可以不用预加载页面组件如文本框等。

如引用的是Sench-touch.js,View中组件需事先加载.例:requires ['Ext.MessageBox'],

目前先用不到Model和Store,先注释枪毙,其他应该能看明白.

做的例子是查询显示功能。两个页面,两个控制器。由于是学习阶段,所以我们用一对一关系,一个控制器对一个视图操作,思路清理后可以正常一对多关系解决。

//启用自动加载
Ext.Loader.setConfig({
enabled:
true
});
//应用程序入口
Ext.application({
//应用程序名(命名空间)
name: 'ST',
//requires ['Ext.MessageBox'], //预加载(如采用sencha-toucha.js需要预加载)
//需要加载的View
views: ['query'],
//数据模型
//models: ['ST.model.Unit'],
//数据存储
//stores: [ 'ST.store.Units'],
//需要加载的控制器
controllers: ['query', 'QueryList'],
//应用程序启动
launch: function() {
Ext.create(
"ST.view.query", {
fullscreen:
true
})
}
});

期待下文......


本文链接:http://www.cnblogs.com/gkjbest/p/3467181.html,转载请注明。

阅读更多内容

没有评论:

发表评论