精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>Flash闪客>>≈Flash教程≈>>轉:flash6 as 部分解釋

主题:轉:flash6 as 部分解釋
发信人: 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之所以如此流行,很大原因是他简单好学 
//如果很多图案都是用脚本生成的 
//不知道效果会不会很差 
//不多闲话,明天接着研究吧 



----
Nothing_Here           

[关闭][返回]