Ascript程序设计(2011.9.25)
开发者:dayu,如果遇到任何bug以及疑问请联系我
email:zuwuneng@yahoo.com.cn,
qq:32932813
0.1
什么是Ascript
欢迎您体验Ascript,这个脚本语言专门为as3打造,点此下载,点此体验
Ascript是一种解释型脚本语言,用as3实现,并且能和as3无缝结合的一种动态执行的脚本,无需编译.即可执行。
Ascript并不想帮你编写大量的代码,Ascript让你用少量的代码解决动态数据和动态逻辑配置等问题。
Ascript是一个小巧而嵌入式的语言,可以帮助你测试自己的API,语法和其母语as3基本相同,会方便任何熟悉此类语言的人轻易使用,实际上,这个语言能直接运行大部分as3类.
因为Ascript不致力于做as3语言已经做得很好的领域,比如:UI库,游戏底层渲染,物理系统,以及与第三方软件的接口。Ascript依赖于as3去做完成这些任务。Ascript所提供的机制是as3不善于的:动态数据和逻辑。
0.2
Asctipt的特点
Ascript支持基于组件的,我们可以将一些已经存在的高级组件整合在一起实现一个应用软件。一般情况下,组件使用像as3等静态的语言编写。但Ascript是我们整合各个组件的粘合剂。又通常情况下,组件(或对象)表现为具体在程序开发过程中很少变化的、占用大量CPU时间的决定性的程序,例如窗口部件和数据结构。对那种在产品的生命周期内变化比较多的应用方向使用Ascript可以更方便的适应变化。除了作为整合语言外,Ascript自身也是一个功能强大的语言。Ascript不仅可以整合组件,还可以编辑组件甚至完全使用Ascript创建组件。
除了Ascript外,还有很多类似的脚本语言,例如:Lua,Perl、Tcl、Ruby、Forth、Python。虽然其他语言在某些方面与Ascript有着共同的特色,但下面这些特征是Ascript特有的:
① 支持类,可以创建自定义的脚本类,这是个嵌入式脚本语言,和lua等语言比较,最大的优势是支持类。
② 简单。Ascript本身简单,小巧,内容少但功能强大,这使得Ascript易于学习,很容易实现一些小的应用。他的完全发布版swc库不足30K。用flashcs系列发布只会增加不足20k的体积
Ascript的接口极其简单,目前的接口只有6个函数,方便学习使用。
③ 易用,其语法和as3相似,可以用as3的语法进行程序编写。
④ 与as3无缝集成,就是说可以在脚本中调用和创建任意的as3编写的类库和内置API。
0.3
Ascript起航
Ascript的API由Script一个静态类的6个方法提供,以下方法在之后的章节里都会有详细介绍
parser.Script这个类提供如下静态函数接口:
1,初始化脚本引擎:
Script.init(_root:Sprite);
一个参数,表示文档类
2,在全局定义一个脚本函数
Script.declare(code:String);
比如:
Script.declare("function add(a,b){return a+b;}");
3,获取一个全局脚本函数的引用
Script.getFunc(funcname:String):Function;
一个参数,为全局方法名
比如:
var func:Function=Script.getFunc("add");
trace(func(200,200));//将输出400
4,对一个表达式进行估值
Script.eval(code:String);
比如
Script.eval("4+10");//将会获得14
5,执行一段脚本
Script.execute(code:String);
比如
Script.execute("var gl=100;");
将会在虚拟机的全局创建一个gl变量,并将其赋值为100;
6,加载一个脚本类
Script.LoadFromString(code:String);
1个参数为代码脚本字符串
比如
var code="class testClass(){var a=1;var b=2;}";
Script.LoadFromString(code);
然后就可以创建这个脚本类的实例了:
Script.execut("var test=new testClass();trace(test.a,test.b)");
0.4
Ascript 的全局作用域
Script.vm代表了AScript全局作用域
你所声明的全局变量和函数都会在其下创建
比如你执行:
Script.execute("var gl=100;");
trace(Script.vm.gl);//你会发现输出了100
比如你在全局下声明:
Script.declare("function add(a,b){return a+b;}");
trace(Script.vm.add(200,300));//将输出500
Ascript的初级应用之
第一章
数据存取(序列化和反序列化)
Ascript 完全兼容as3的的对象数据书写方式,这种书写方式非常直观
例1:
通过Script.eval反序列化任何简易对象
var arr=Script.eval("[1,23,4,5,5,6,5,65,7,65,7]");//返回一个数组
trace(Script.encode(arr));//将输出[1,23,4,5,5,6,5,65,7,65,7]
例2:
var person=Script.eval('{name:"dayu",age:32,location:"china"}');//返回一个对象
trace(Script.encode(person));//将输出{name:"dayu",age:32,location:"china"}
一个稍微复杂一点的例子,存在多级的对象
使用encode将简易对象序列化为一字符串
var Person={};
Person.aa=100;
Person.bb=200;
Person.cc="???????";
Person.dd=[1,23,24,34,3,53,5,345];
trace(Script.encode(Person));//将输出{aa:100,bb:200,cc:"???????",dd:[1,23,24,34,3,53,5,345]}
你可以将输出的内容序列化为字符串,
var str=Script.encode(Person);
以后可以随时通过eval进行反序列化为对象
Script.eval(str);//将返回一个个Person数据一样的对象
这种形式存数据的好处:
1,和as3完全兼容
2,和json和xml相比数据量最小
3,数据容易理解
4,通过Script.encode和Script.eval的配合完成简单对象序列化和反序列化过程
待续...
Ascript的高级应用
和组件结合使用,所见即所得的编辑UI和逻辑

