用户界面的另外一种实现方案(2)现有的方案
来源:互联网 发布:手机竹笛演奏软件 编辑:程序博客网 时间:2024/05/17 20:42
我们知道,客户程序特点:
1、指定资源
2、类描述
3、对象描述
4、脚本
5、事件响应
那么现有的方案是如何实现的呢?我们举个魔兽世界中一个UI程序的例子:
<Frame>标签中包含名字name , parent以及子标签,每个子标签都可以包含<Scripts>来定义事件,如
<Scripts>
<OnLoad>
self.regionParent = self:GetRegionParent() ;
self.min = 0.0;
self.max = 1.0 ;
</OnLoad>
<OnUpdate>
local alpha = self.min + (self.max - self.min)*self:GetProgress();
self.regionParent:SetAlpha(alpha);
</OnUpdate>
</Scripts>
在这段代码中包含了客户端程序的3个要素 :3、对象描述; 4、脚本;5、事件响应,但不包含类的描述和指定资源。上面这段代码是XML的,所以和HTML格式很象,如果把scripts看作javascript的话,就没啥差别了。实际上类的描述很多都是内嵌的。比如Frame,这个标签包含哪些属性和动作事实上已经在虚拟机中已经存在了。资源的指定很容易做到的,可以参照html。可以看出xml在对象化的界面描述中,是具有很大的优势的。现在我们试图将类的描述加入其中。这就需要一个全局的管理器,单纯的一个xml 标签无法实现这种目标。类的描述标签同时还必须处理继承。
<class name = "window"/>
<class name = "button" inherited="window"/>
<commit class="button" text = "提交" onclick="..."/>
然后我们就可以根据这段描述生成一个按钮。在这个脚本中,对象描述、脚本以及事件响应是放在一起了。这个和HTML是类似的。
现在我们再考察另外一个UI系统XUL。
◇建造一个xul+css+dom+js的布局引擎
◇实现附加的布局基元(layout primitives),比如spring,strut模型以及popups等,这些附加的布局基元可以和标准的css定义的布局基元进行互操作。
◇实现一个二进制的cache,以便加速xml和js的重载速度。
◇实现一个组件/标签扩展模型,例如xbl,允许xml标签可以被定义为组件,并在其他的页面,窗口和对话框中复用。
◇实现系统其他构件的xml标签支持,例如tree等等,这些构件在html中没有实现。
◇通过某种数据绑定形式(mozilla采用的是rdf),提供后台数据与gui xml文件的绑定。
◇除了本地语言格式之外,还要为js提供一套完整的sdk,支持文件i/o,网络等操作。
◇实现基础构造支持,提供命令运行和命令更新的支持
◇为css和xml实现一种高效的内存缓存,以便实现轻量级的原型复制和共享(可以使用类似“写时拷贝”的语义)。
哈,很意外地发现XUL解决了上面所提到地很多问题。比如二进制缓存解决解析脚本和对象描述加载的效率问题。xbl特性允许xml标签被其他复用。rdf提供后台数据和xml文件的绑定。很显然,xul的功能是强大的,具有很强的可扩展性。不过我们也同时发现,xul不是统一的解决方案,他们需要多种手段合作才能完成需要的目标。
而且,js的语言特性主要针对于web,是否具有更广泛的适用性,还有待进一步考察。我们从Mozilla ThunderBird中选取2个文件EdAdvanceEdit.xul和EdAdvanceEdit.js,在comm.jar,content/editor中,发现代码仍然很复杂。XUL的理念十分先进,但是基于js/xml/css带来不小的复杂性。而且他们使用全局变量document等,都是基于web结构的,能否被广泛使用其他项目,还需要进一步考察。xul架构中,描述和脚本分离的架构,在编写时也是十分麻烦的。
java也是一个经常被用于跨平台开发的界面设计工具。swat/swing是2个重要的工具,不过我们知道,java是以class被发布的,和其他脚本语言有一定的区别,在界面设计上更接近于编译语言c/c++等。
java在IDE等辅助工具上有完整的支持,所以在开发效率上是有优势的。但在执行效率,还是一如既往的慢。我想这个和java过分依赖于虚拟机的opcode有关。比如onclick事件的执行,如果本地执行需要1秒,但全部以opcode执行的话,估计需要2秒,甚至更多,这种情况,在游戏尤为难以容忍,所以,我们在大型游戏中,很难见到用java的作为脚本执行语言的原因吧。
- 用户界面的另外一种实现方案(2)现有的方案
- 用户界面的另外一种实现方案(1)我们要做什么
- 现有的身份管理方案
- SSO的一种方案
- 一种蓝牙打印机的实现方案
- 一种嵌入式Web Sever的实现方案
- Android网络电台的一种实现方案
- 一种连接池的实现方案
- 一种可靠的 DLL 接口实现方案
- [Lua]实现switch的一种方案
- Lua 中实现 OO 的一种方案
- 一种基于OpenCV的三维重建实现方案
- 在线用户列表实现的一种方案
- Android网络电台的一种实现方案(歌醉原创)
- Android网络电台的一种实现方案(歌醉原创)
- Appfuse与现有东西的整合方案
- 【热修复现有方案的比较】
- 一种简单的密码验证方案2
- 拍摄独特人像的技巧(下)
- 爱与孤独
- Head First C# 中文版 图文皆译 第六章 继承 翻译完毕 PDF下载
- 学习问题
- Eclipse设定文件的默认打开方式
- 用户界面的另外一种实现方案(2)现有的方案
- 【沉浮在软件公司】之一学生生涯的尾巴
- 框框下的独特人像拍摄 【图片欣赏】
- rac 整个failover的过程
- Clustering 服务
- C、C++ 和 Java安全编码实践提示与技巧
- Rails源代码分析(47):ActionView::Helpers::ActiveRecordHelper
- 软件开发的葵花宝典
- 藏匿于作品之中的动感 Vol.2 【图片欣赏】