赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 120
- 在线时间
- 953 小时
- 注册时间
- 2007-4-25
- 帖子
- 805
|
本帖最后由 苏小脉 于 2011-3-4 03:44 编辑
老邢 发表于 2011-3-3 15:15 ![]()
回复 苏小脉 的帖子
我说的gui是game.exe中显示图形的部分,不是地图编辑器。ruby本身是没有显示图形、处 ...
Ruby 的标准库中封装了调用本地函数的抽象接口,所以“只用ruby.exe没法做游戏啊”仍然是可商榷的,取决于你如何定义“只用ruby.exe”。我是把你这句“只用ruby.exe”理解为只用 Ruby 了,那么当 Ruby 使用了可执行程序外部以 C 扩展的形式提供的 Ruby 标准库时,仍然算作“只用ruby.exe”。如果是 Win32 平台,用户可以通过 Ruby 标准库中的抽象接口调用 gdi32 和 user32 中的函数,不需要用户亲自写下任何本地扩展,就可以“显示图形、处理声音以及鼠标输入等功能”,以我的理解,这仍然是“只用ruby.exe”。其它平台也有各自的接口。当然,这样做会产生不必要的组件间通信,执行效率低。
ruby的效率并不是最重要的,gui的效率才是关键。
在你消除歧义之后,我对你这句话的理解也变成了“包含显示图形、处理声音以及鼠标输入等功能的部分才是关键”。没错,底层引擎的效率确实很关键,但对于像 RM 这种完全把执行权交给 Ruby 的宿主和寄生物的关系,Ruby 的效率也是游戏流畅性的枢纽,特别是在高层处理大量数据的时候。就 RMVX 使用的 CRuby 1.8 来说,纯粹的抽象语法树步行器,保守的 GC 算法(mark and sweep),绿色线程等机制都是致命的杀手,使得 1.8 效率低于 1.9 将近一倍。如果 RM 采用 Ruby 1.9,就能为 CPU 和 Cache 节省到近于之前一半的时间和空间。又如只是把 Ruby 的使用嵌入到特定的非重要逻辑控制的场合(如用于撰写某个 NPC 的有限状态行为的脚本),而非是完全让出执行权,可能 Ruby 层的效率也就不那么重要了。Lua 这样的轻量级语言是很容易写出高效实现的,其效率自然比所有 Ruby 实现都高,但在语言层也少了很多重要的东西。
-----------------------------------
编辑(回的时候没没看到本主题第三页):
我说过,图形功能是c语言(也可能是其他语言,但是c的可能性最大)编写的ruby扩展,他提供了rgss中bitmap等对象的原始处理。
C++ 的可能性比较大,因为以前根据对 Game.exe 入口点的分析曾推断出该可执行程序是由微软的 VC++ 生成的,我想不至于又专门用 C 去写 DLL。
rgss是一系列封装了游戏逻辑的ruby脚本。所以gui不是rgss提供的,没有rgss,有gui就可以直接编程。
能否引用一下你这些结论的资料来源?我之前所理解的 RGSS 不仅仅是高层的脚本,同时还应囊括底层引擎,是游戏引擎 + RPG 系统。从抽象接口上来看,Sprite、Viewport、Window 等虽然是引擎的部分,但他们都是可编程的,尽管实现被隐藏了,但其接口也以 Ruby 类的形式在 Ruby 之上的抽象层存在,这些接口形成了整个“脚本系统”(RGSS 中的 "SS")的基础部分;从文件命名上来看,这些底层接口被封装到一个叫 RGSS????.DLL 的共享库中,可见实现者认为引擎也是 RGSS 的一部分。
当然,依赖于本地环境的 OS 窗口本身可以是由 Game.exe 提供的,把这个排除在 RGSS 之外倒是很合理,因为封装在 DLL 中的部分无须依赖于自己创建的窗口,而是通过外界传递进来的窗口资源标识(句柄)来处理各种和窗口有关的内容。 |
|