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