发信人: aeoluszan(呢隻貓仔) 
整理人: lyongmei1977(2002-06-29 23:09:44), 站内信件
 | 
 
 
正在看beta版的help文档 
 做了点笔记,希望能陆续贴出来和大家交流 
 下面的大部分内容为flash6 as的新增部分, 
 本人英文勉强过六级,而且不是照翻原文 
 如果有兴趣就将就着看吧,hehe 
 
 === 严格的等于,只有当运算符两边的参数类型和值都相同时才返回true 
 
 >>> 就像Java中的>>>一样,逻辑右移,左边补0(而>>补符号位) 
 
 Arguments(object) 
 Arguments.callee 
 Arguments.caller 
 [不详]help文档中是空的,估计callee是被调用的参数,caller是调用者 
 
 asfunction 
 一种协议,就像http://10.83.9.144/a.txt 
 asfunction是一种新的协议,他指定一个flash中的函数,并执行它 
 格式: asfunction:<functionName>,<parameter> 
 例子: function MyFunc(arg){ 
 trace("Hello, "+arg); 
 } 
 textField="<A HREF=\"asfunction:MyFunc,Flasher\">Click me"; 
 当这个超间接被点中的时候,就会执行函数,结果为 Hello, Flasher 
 应用: 
 动态文本框设成HTML enable,这样就可以用超联接来代替按钮而执行actionscript 
 但不知道能不能在页面中使用 
 
 Button 一种新的对象 
 在flash中的所有按钮都是这个对象的实例。你可以在属性面板中给一个按钮指定一个 
 实例名,使用Button的属性和方法来操作这个按钮 
 他的方法有: 
 enable() 指出按钮是否可以工作 
 onKeyDown() 当按钮获得焦点并有键按下时将调用其中的代码 
 onKeyUp() 当按钮获得焦点并有键按下后释放时将调用其中的代码 
 useHandCursor() 指出当鼠标在他之上时光标是否是手形 
 他的属性有: 
 _alpha 
 _currentframe 
 _droptarget 
 _framesloaded 
 _height 
 _name 
 _parent 
 _rotation 
 _target 一个按钮实例的目标路径 
 _totalframes 
 _url 生成这个按钮的swf的URL地址 
 _visible 
 _width 
 _x 
 _xmouse 
 _xscale 
 _y 
 _ymouse 
 _yscale 
 
 
 
 
 
 
 
 case 用于switch语句 
 
 chr chr(int)返回int对应的ASCII字符,flash4就开始支持 
 
 clearInterval 清除时间间隔 
 flash6开始支持javascript,vbscript一样的timer 
 即设定一个时间间隔,每次执行一个函数, 
 最典型的应用是网页上的跑马灯或本机时间显示器 
 格式 clearInterval(cookie) 
 flash6把这种timer成为Cookie对象(有别于通常意义的cookie) 
 例子: 
 function callback() { 
 trace("interval called"); 
 } 
 var cookie; 
 cookie = setInterval( callback, 1000 ); 
 // sometime later 
 clearInterval( cookie ); 
 
 default 用于switch语句 
 
 #endclip [不详]估计用于actionscript的预编译 
 
 Function 
 Function.call() 
 Function.apply() 
 一种新的对象,help上无详细解释 
 
 _global 形如_root,但作用远不相同 
 用它可以指向ActionScript 的核心类 
 我们知道String,Object,Math,Array这些类都是内置的 
 他们就是被声明和定义在ActionScript的核心类中 
 他们的访问是和时间轴对象或变量是不同的 
 现在flash也允许你用_global来设置自己的内置对象或变量 
 一旦他们建立起来,就在整个运行时有效 
 任何时间轴,场景,mc中都可以像是用Math等对象一样使用他们 
 
 #initclip [不详]估计用于actionscript的预编译 
 
 instanceof 与Java中的instanceof一样 
 判断一个对象是否是另一个对象的实例 
 比如 new String("Hello") instanceof String 就会返回true 
 然而 "Hello" instanceof String 返回false 
 new Date() instanceof String 返回false 
 
 Key 对象 
 方法有: 
 addListener() 类似Java,注册一个对象监听onKeyDown 和onKeyUp时间 
 可以使用newListener建立一个新的监听对象, 
 该对象须定义了onKeyDown onKeyUp方法 
 当有键按下或释放,无论是否获得焦点,都会引发监听者的执行 
 个人认为可以把功能写在一个newListener对象中 
 在需要的地方注册他,就可达到代码共享和方便管理的效果 
 且一个事件可以引发多个mc的操作 
 getAscii() 返回按下键的ASCII码 
 getCode() 返回按下键的虚拟键值(好像和键盘分布相关) 
 inDown() 返回是否有键按下 
 isToggled() 返回是否Numr Lock或Caps Lock点亮 
 removeListener()注销一个已注册的事件监听者 
 如果成功,返回true 
 反之,返回false。如该对象不在Key对象的监听者列表中 
 属性<略> 
 
 
 
 
 
 
 
 
 LoadVars 对象 
 LoadVars对象是loadVariables的一个选项,用于在flash电影和Server间传递变量 
 LoadVariables把当前的电影中的所有变量都传到指定的url 
 这一动作的反馈将触发onCilpEvent(data)的执行并更改目标mc 
 事实上,这样做是很不方便的 
 我们经常要做一些空的mc以容纳那些要传出和传进的参数,否则会影响全局的变量空间 
 这种空的mc也经常捕捉onClipEvent(data)事件。 
 并且没有办法可以捕获下载的错误信息,进程显示或数据流 
 LoadVars对象工作很像一个XML对象, 
 他使用load,send和sendAndLoad方法来和服务器端通信 
 但LoadVars和XML的最大的不同在于,LoadVars传输的是ActionScript中的属性 
 而XML则是存储在XML对象中的DOM树 
 
 LoadVars.contentType() 
 [不详]help中未有说明 
 
 LoadVars.load() 格式:loadVarsObject.load(url); 
 从制定的url中获得变量并放置在loadVarsObject对象中 
 loadVarsObject中所有同名的属性值都会被覆盖,但剩下的不会删除 
 值得一提的是,下载的数据必须是MIME格式,即application/x-www-urlform-encoded 
 loadVariables中也有一样的要求 
 
 LoadVars.send() 格式:loadVarsObject.send(url [,target]); 
 target是浏览器中frame名,将在指定的frame中显示结果 
 比如你用flash做个用户登陆(在左边的frame中) 
 提交信息到服务器后,欢迎页面可以在main中显示 
 使用的是Post方法 
 
 LoadVars.sendAndLoad() 
 格式:loadVarsObject.sendAndLoad(url,targetObject); 
 将loadVarsObject中的变量post到url, 
 server的response下载编译成变量数据,放到targetObject中 
 
 LoadVars.onLoad() 
 格式:loadVarsObject.onLoad(success) 
 success是个布尔值 
 当load或sendAndLoad操作结束时会被调用 
 函数执行后success将显示是否成功 
 如果成功,则loadVarsObject将包含那些加载进来的变量 
 
 LoadVars.toString() 
 显示loadVarsObject中的属性 
 例子: 
 var myVars=new LoadVars(); 
 myVars.name='Jacky'; 
 myVars.age=21; 
 trace(myVars.toString()); 
 将在OUTPUT中显示 
 name=Jacky&age=21 
 
 LoadVars.loaded 是一个属性 
 默认是undefined, 当load sendAndLoad操作开始时置否,完成时置真 
 
 LoadVars.getBytesLoaded() 
 返回load或sendAndLoad操作下载的字节数 
 当目前没有load进程或load操作还没有初始化时返回undefined 
 
 LoadVars.getBytesTotal() 
 返回load或sendAndLoad操作下载数据总的字节数 
 当目前没有load进程或load操作还没有初始化时返回undefined 
 或者当total bytes不能确定时也会返回undefined 
 
 mothod() [不详] 
 
 Mouse 对象 
 他的方法: 
 addListener()注册一个拥有onMouseDown onMouseMove onMouseUp的对象进行监听 
 hide() 
 removeListener()注销一个已注册的监听者 
 show() 
 
 MovieClip.beginFill() 
 单色填充 
 格式:MovieClip.beginFill ([rgb[, alpha]]) 
 rgb参数一个十六进制的数,如红色为0xFF0000,如果没有给出rgb,则填充失败 
 alpha是透明度,0-100 
 当路经不封闭时,会自动加上一条封闭线,并开始填充 
 
 MovieClip.beginGradientFill() 
 渐变填充 
 格式:MovieClip.beginGradientFill (fillType, colors, alphas, ratios, matrix) 
 fillType为linear(线性)或radial(辐射) 
 colors是一个RGB的数组,用于指定渐变填充过渡色 
 alphas是一个alpha的数组,0-100用于指定渐变填充过渡色的透明度 
 ratios是一个颜色分配给定量数组,0-255 用于指定渐变填充过渡色 
 matrix是一个变化矩阵,他有两种形式 
 a, b, c, d, tx, ty in a 3 by 3 matrix of the following form: 
 a b 0 
 c d 0 
 tx ty 1 
 例子: 
 _root.createEmptyMovieClip( "grad", 1 ); 
 with ( _root.grad ) 
 { 
 colors = [ 0xFF0000, 0x0000FF ]; 
 alphas = [ 100, 100 ]; 
 ratios = [ 0, 0xFF ]; 
 matrix = { a:200, b:0, c:0, d:0, e:200, f:0, g:200, h:200, i:1 }; 
 beginGradientFill( "linear", colors, alphas, ratios, matrix ); 
 moveto(100,100); 
 lineto(100,300); 
 lineto(300,300); 
 lineto(300,100); 
 lineto(100,100); 
 endFill(); 
 } 
 这个矩阵应该就是计算机图形学中的3次变换阵 
 另一种形式 :matrixType, x, y, w, h, r. 
 matrixType应该是box,x,y为左上角的坐标,w,h为宽度和高度,r为旋转 
 例子: 
 _root.createEmptyMovieClip( "grad", 1 ); 
 with ( _root.grad ) 
 { 
 colors = [ 0xFF0000, 0x0000FF ]; 
 alphas = [ 100, 100 ]; 
 ratios = [ 0, 0xFF ]; 
 matrix = { matrixType:"box", x:100, y:100, w:200, h:200, r: 
 
 (45/180)*Math.PI }; 
 beginGradientFill( "linear", colors, alphas, ratios, matrix ); 
 moveto(100,100); 
 lineto(100,300); 
 lineto(300,300); 
 lineto(300,100); 
 lineto(100,100); 
 endFill(); 
 } 
 
 MovieClip.clear() 
 清除所有关联本mc的画图命令,所有用flash画的图像不会受影响 
 相当Java中的Grphics.repaint(); 
 
 MovieClip.createEmptyMovieClip() 
 MovieClip.createEmptyMovieClip (instanceName, depth) 
 在调用的mc处生成一个子mc,默认位置在左上方 
 
 MovieClip.createTextField() 
 MovieClip.createTextField (instanceName, depth, x, y, width, height) 
 在调用的mc中生成一个文本框,位置(x,y)到(x+w,y+h) 
 该TextField对象默认的属性是: 
 type = "dynamic", 
 border = false, 
 background = false, 
 password = false, 
 multiline = false, 
 html = false, 
 embedFonts = false, 
 variable = null, 
 maxChars = null 
 
 MovieClip.curveTo() 
 MovieClip.curveTo ( controlX, controlY, anchorX, anchorY) 
 使用贝塞尔参数(controlX,conty)从当前位置到(anchorX,anchorY)画一条曲线 
 并把当前位置置为(anchorX,anchorY) 
 如果之前没有用过moveTo(int x,int y)则默认为(0,0) 
 
 MovieClip.enabled 
 属性 
 如果把它置为否,则那些事件监听动作就不再发生, 
 但不影响时间轴,原来在播放则继续播放 
 
 MovieClip.endFill() 
 应用一个画直线或曲线自从上一次beginFill或beginGradientFill 
 如果路径不封闭,则连接首尾端点并填充 
 
 MovieClip.focusEnabled 
 属性。 
 如果置否,则一个mc不能接受输入焦点,除非是个按钮mc 
 
 MovieClip.hitArea 
 用以动态改变一个Button MC的hitArea 
 当你改变hitArea的时候立即生效 
 
 MovieClip.lineStyle() 
 MovieClip.lineStyle ([thickness[, rgb[, alpha]]]) 
 三个参数分别是线宽,填充色和透明度 
 你可以在作画线工作之前指定线的类型, 
 更可以在画线过程中改变线的style,这样画出的线在不同的段中也不一样 
 
 MovieClip.lineTo() 
 画线中移动到下一个节点 
 例子: 
 _root.createEmptyMovieClip ("triangle", 1); 
 with (_root.triangle){ 
 beginFill (0x0000FF, 50); 
 lineStyle (5, 0xFF00FF, 100); 
 moveTo (200, 200); 
 lineTo (300, 300); 
 lineTo (100, 300); 
 lineTo (200, 200); 
 endFill(); 
 } 
 
 MovieClip.moveTo() 
 移动到(x,y)前面已经有例子了 
 
 MovieClip.scaleOnResize 
 是个属性,决定当一个mc resize时里面的mc是否相应resize,默认为真 
 
 MovieClip.setMask() 
 myMovieClip.setMask (maskMovieClip) 
 向myMoveiClip指定一个mask mc 
 
 MovieClip.trackAsMenu 
 属性。是否像一个menu一样工作 
 
 MovieClip.useHandCursor 
 属性。是否使用手形鼠标,当rollOver的时候
 
 
 
 
 
 
 
 
 
 
 
 
 NetConnection 
 网络连接对象,用以处理和服务器的通信 
 构造器 Object netConnection(); 
 方法 Boolean connect("http://"host[ort][/removeObjectPath]"); 
 该方法在NetConnection对象和服务器间建立一个连接 
 用户必须指定协议为"http"或"https" 
 这将会发送所有后来的通信量,通过FAP层(http Post transactions) 
 FAP被设计成一种连接协议,事实上,他并不建立与远程服务器的真正的连接 
 他只是简单的告知客户端他将如何来建立这个连接 
 如果正确的通知了,则返回true,反之false 
 void call( char* RemoteMethodName, NetResponse* Object, 
 
 [param1...paramN] ); 
 用以调用远程服务器的一个方法或操作。这是一个异步操作 
 同样的,在未来的不可确定的时刻,一个反馈消息将会发出 
 为了接受,这一反馈,需要使用Response对象的onResponse()方法 
 void close(); 
 例子 
 //Connect to the service "SomeCoolService" located in the directory 
 
 //"blag" on server "foo.com" via server port 1929. 
 f=new NetConnection( "http://www.foo.com:1929/blag/SomeCoolService" ); 
 // Invoke the "multiply" operation on the remote server and multiply 3 and 2. 
 f.call("multiply", new NetResponse(this), "3", "2"); // 
 void close(); 
 当数据已经被分派到http层,这个actionscript资源将被释放 
 所以,此时NetResponse对象的onResponse()方法不再被调用 
 事件处理 
 void onStatus( NetStatus status ); 
 void onError( NetError error ); 
 这是两个默认的处理方法。 
 
 NetResponse 
 NetResponse使用用户提供的用以接收远程方法调用(RMI)信息的对象 
 通过onResult()接收反馈 
 构造器:Object netResponse( Object owner ); 
 用户可以提供当检测到有错误时调用的方法,否则则会调用默认的onError() 
 void onError( NetError error ); 
 void onResult( ResponseObject );用来处理RMI的反馈结果 
 例子 
 f = new NetConnection("http://www.foo.com/multiply"); 
 function MyResponse( parent )//定义一个对象 
 { 
 this._parent = parent; 
 } 
 MyResponse.prototype.OnResult = function ( response ) { 
 result = response.product; 
 }//定义这个对象的方法 
 f.call("multiply", new MyResponse(this), "3", "2" ); 
 相关的还有 
 Class NetError 
 Object netError( String* errorCode, String* Description, String* Details ); 
 String errorCode; // dot delimited description of the error 
 String description; // 简短,但可读的错误信息 
 String details; // 详细的,但未必可读性强的错误信息 
 
 Object.addProperty() 
 myObject.addProperty( prop, getFunc, setFunc ) 
 prop属性名,getFunc用来读该属性的方法,setFunc用来写该属性的方法 
 如果成功建立一个新属性则返回true 
 
 Object.__proto__ 
 属性 
 指向父类的属性 
 
 Object.registerClass() 
 Object.registerClass( symbolID, theClass ) 
 symbolID为mc的linkage name或是actionscript一个类的名字 
 theClass为这个ActionScript类构造函数的引用,如果为null则为注销这个symbol 
 如果注册成功,则返回true 
 例子: 
 首先,你建立一个mc Check Box在库里,然后建立一个CheckBox类来代替这个mc 
 function CheckBox() { 
 ... 
 } 
 //设置CheckBox的父类,即它为一个MovieClip子类 
 CheckBox.prototype = new MovieClip(); 
 //定义方法 
 CheckBox.prototype.setLabel = function (newLabel) { 
 this.label = newLabel; 
 ... 
 }; 
 CheckBox.prototype.setValue = function (newValue) { 
 this.value = newValue; 
 ... 
 }; 
 CheckBox.prototype.getValue = function () { 
 return this.value; 
 }; 
 CheckBox.prototype.getLabel = function () { 
 return this.label; 
 }; 
 接着你需要把这个类与Check Box 电影剪辑联系起来 
 你需要在linkage面板中指定他的linkage name,比如也是CheckBox 
 然后是actionscript 
 Object.registerClass("CheckBox" /*symbolID*/, CheckBox /*theClass*/ ); 
 之后 ,如果你在场景中放了两个check box 
 则可以通过他们的instancename调用CheckBox类中的方法 
 myCheckBox1.setValue(true); 
 myCheckBox2.setValue(false); 
 myCheckBox2.setLabel("new label for #2"); 
 你也可以动态的生成一个mc实例 
 // createCheckBox is a helper function that 
 // dynamically creates CheckBoxes 
 function createCheckBox(name, depth) { 
 attachMovie("CheckBox", name, depth); 
 } 
 createCheckBox("myCheckBox3", 100); 
 myCheckBox3.setValue(false); 
 myCheckBox3.setLabel("new label for #3"); 
 
 Object.unwatch() 
 myObject.unwatch (prop) 
 除去一个用Object.watch()生成的watchpoint 
 
 Object.watch() 
 myObject.watch( prop, callback [, userData] ) 
 prop属性名 
 callback一个function对象,形式为callback(prop, oldval, newval, userData). 
 用来当被观察的属性值发生改变时调用。很象JavaBean中的约束属性 
 userData任意的要传到callback方法的actionscript数据,可选 
 一个属性只能注册一个watchpoint,如果还有object.watch()则会覆盖原来的 
 o = {p:1};//o是个对象 
 function watchCB(prop, oldval, newval, userData) { 
 trace("o." + prop + " changed from " + oldval + " to " + newval); 
 return newval; 
 } 
 o.watch('p', watchCB); 
 o.p = 2; 
 o.p = 3; 
 delete o.p; 
 o.p = 4; 
 o.unwatch('p'); 
 o.p = 5; 
 The following is displayed in the Output window: 
 o.p changed from 1 to 2 
 o.p changed from 2 to 3 
 o.p changed from 3 to 4 
 
 //差不多了,今天就看到这里 
 //sigh,flash6在脚本画图,分布计算,对象完整性方面提高很多 
 //吸取了很多新兴技术 
 //动态统计数据图示,和3D即时渲染都变得触手可及 
 //不过恐怕搞得太专业会失去一部分初学者和低层次的爱好者 
 //flash之所以如此流行,很大原因是他简单好学 
 //如果很多图案都是用脚本生成的 
 //不知道效果会不会很差 
 //不多闲话,明天接着研究吧 
 
 
  ----
              | 
 
 
 |