- 注册时间
- 2006-6-19
- 最后登录
- 2010-1-23
⑥精研
- 积分
- 2223
|
发表于 2007-9-27 15:56:16
|
显示全部楼层
我们貌似没说到一起去.我想要说的,正是TJS与KAG Scenario的地位有本质的区别,不应该把高层和底层脚本混为一谈.KAG系统是最初通过TJS实现的,而用于控制KAG的脚本是KAG Scenario.后来出于性能原因将KAG Scenario的实际解析也做成了native的,但大的思路并没有变,KAG Scenario需要下面的TJS支持.它们的地位不应该平等,除非把KAG稍微增强一点,然后绕开TJS为KrKr底层写一个插件去解析KAG.那同一般的两层式引擎就没有太多区别了.
应该这样想,如果KrKr不允许在KAG Scenario中嵌入TJS片段,那么TJS的存在与否就如同黑盒子一般,用户无须知道.完全使用原本的框架,一句TJS也不写,一样能让KrKr跑起来运行游戏,但是功能十分有限.一般来说"易用"意味着脚本的层次非常高,而层次太高就缺乏细微控制的能力;如果一个层次很高的脚本仍然完整但简单的运算能力,那么可以通过在这个高层脚本上去实现有限的扩展,但运行速度也会相应受影响.
而"通用"意味着要么要提供统一的脚本接口,让用户可以编写解释器(或者叫运行时)插件去将一种特化的DSL与底层引擎结合起来;要么要允许现有的脚本得到扩展,同样通过底层插件.区别是,前者完全抛弃引擎原本提供的默认脚本形式去实现一种新的,后者仍保持原有脚本形式并将其扩展.后者在现有的许多引擎上都有所体现,例如说在Windows上许多引擎都允许用户注册并挂接外部的DLL去扩展引擎的功能.
但...LZ看来想要的是我这里说的前者.而「ゲームエンジンプログラミング」(Game Engine Programming)里说的正是这样的一种实现.它使用一种比较flat的架构(与hierarchy相对).先估计大体的需求类别,并设计接口.所有的组件都只实现一个很小很单一的功能,并且编译为动态链接库.这样就得到了每一块的积木.再写一个启动程序,将图象,声音,脚本解释器能粘合到一起.有兴趣的话我可以把那书光盘里的代码传给你,不过因为作者声明了那不是开源代码,所以就不直接放论坛上了. |
|