| xin's profile流隙PhotosBlogLists | Help |
|
August 01 SnakeScript1.1.0SnakeScript1.1版本(截止8.1)
新增功能及特性
1.动态优先级设定
可以在程序运行的时候动态改变某个脚本的优先级 2.动态实现脚本的加载、释放、暂停、恢复、结束等控制
这些对脚本运行的控制已经可以写入不同脚本里,而不是主引擎去调用这些功能, 这意味着RPG脚本分为主脚本和很多子脚本,主脚本负责在游戏运行过程中动态的 管理所有的子脚本 3.自动堆栈平衡 如果进行对主引擎函数的调用,则调用结束后无需手动传入参数个数来平衡堆栈,脚本引擎代劳,防止人为因素的错误发生 4.无限级别函数调用
曾经用了一个函数追踪栈来记录函数之间的调用信息,因为初始化的追踪栈是有限的,所以只支持有限级别的函数调用(比如32级) 现在通过更好的方法将函数调用信息记录到堆栈上,实现了无限级别调用,可以实现完全的地归操作,(受限与堆栈大小) 5.主引擎对脚本函数的异步及同步调用
这个是实现起来最复杂功能(占用新版本开发的50%时间),可以在任意时候,任意位置来让主引擎去调用脚本里的方法,同步异步都支持 不明白同步异步的同学去看脚本例子,内含介绍 6.脚本和脚本之间函数的同步和异步调用
这也是新版本的核心功能,现在设计脚本RPG的模式就非常清晰了,比如一个npc脚本使用了一个爆炸道具,这个npc脚本就能通知附近的油桶脚本(函数调用) 让油桶脚本播放爆炸的动画,很酷!!! 7.函数参数类型化声明
在声明函数的时候无需像以前一样传入参数个数,而是传入参数名和希望的类型,这样可以让调用者明白传什么样的参数最合理 8.静态内存初始化
一个朋友希望数组初始化能像C或java一样简单,而不是一个一个赋值,我想了一下觉得建议很好,立即实现这样初始化 比如 var xiaoxin[4] = {1, 2, "xiaoxin", 3, 5} 9.支持内嵌虚拟指令集
我非常喜欢C++里的内嵌汇编模式,于是在脚本编译器上也实现了同样的功能 _svm{ PUSH 10 PUSH 20 POP _T1 POP _T0 ADD _T0, _T1 PUSH _T0 POP _RetVal } 一个简单的加法虚拟机指令代码,可以嵌入.ss脚本代码的方法里 10.struct结构支持
还是应为很喜欢C代码的缘故,加入struct数据结构,这个没什么可说的,就是方便组织数据 struct结构可以嵌套 例: struct Anima{ var data[20] } struct Player{ var x; var y; Anima ani; } 11.实现include指令
可以编写静态库,功能和C的是一样,编译的时候查找并链接,我写了一个system库,主脚本如果要实现对虚拟机的控制需要#include预编译指令链接 12.优化脚本虚拟效率再提升30%
测试机 SE w810 SnakeScript1.0 每秒运行运行指令个数 24000条 SnakeScript1.1 每秒运行运行指令个数 35000条 看看在J2SE上的运行 SnakeScript1.0 每秒运行运行指令个数 4584030条 SnakeScript1.1 每秒运行运行指令个数 6276859条 注意: 影响效率的因素:1.多脚本并发执行,上下文切换有性能损失(5%) 2.脚本对主引擎API调用(host方法调用),性能损失(10%) 3.脚本之间的函数异步调用,性能损失(10%) 下载地址 Comments (1)
TrackbacksThe trackback URL for this entry is: http://antigalaxy.spaces.live.com/blog/cns!92539201CD451166!138.trak Weblogs that reference this entry
|
|
|