xin's profile流隙PhotosBlogLists Tools Help

Blog


    August 01

    SnakeScript1.1.0

    SnakeScript1.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)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Sept. 3

    Trackbacks

    The trackback URL for this entry is:
    http://antigalaxy.spaces.live.com/blog/cns!92539201CD451166!138.trak
    Weblogs that reference this entry
    • None