FLASH脚本的编写方法及基本脚本的使用.docx
- 文档编号:12765508
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:46
- 大小:36.44KB
FLASH脚本的编写方法及基本脚本的使用.docx
《FLASH脚本的编写方法及基本脚本的使用.docx》由会员分享,可在线阅读,更多相关《FLASH脚本的编写方法及基本脚本的使用.docx(46页珍藏版)》请在冰豆网上搜索。
FLASH脚本的编写方法及基本脚本的使用
FLASH脚本的编写方法及基本脚本的使用
一、关于如何编写flash中的脚本
首先,要知道编写脚本,不需要用户对AS有完全的了解!
现在要考虑的问题是,如何在你的flash中添加编写脚本?
简单的说,添加脚本可分为两种:
一是把脚本编写在时间轴上面的关键桢上面(注意,必须是关键桢上才可以添加脚本)。
二是把脚本编写在对象身上,比如把脚本直接写在MC(影片剪辑元件的实例)上、按钮上面。
此外,大家也需要简单理解一下flash是如何执行你编写的脚本的。
当你在时间周的关键桢上添加了脚本,那么当flash运行的时候,它会首先执行这个关键桢上的脚本,然后才会显示这个关键桢上的对象。
还有一些简单的知识,AS中的对象都包括什么呢?
它可以包含数据,也可以是舞台上的电影剪辑,也可以是舞台上的按钮等。
既然包含了那么多对象,那么每种对象肯定有各自的属性!
比如电影剪辑(movieclip)对象,它的属性就有:
_height(高度),_rotation(旋转),等,这些属性不需要你去特意的记忆,当使用的时候可以随时翻阅脚本字典。
在以后的教程中会陆续给大家介绍一些基础脚本的使用技巧。
废话少说,开始这次教程的例子吧
二、本次教学需要学到的基本AS命令如下:
stop()、play()、gotoandplay()、gotoandstop()、nextFrame()、prevFrame();、nextScene()、prevScene();、stopAllSounds();按钮的AS编写规则
三、实例制作
为了能更清楚的认识这些简单的命令,咱们就从一个最简单的例子开始!
首先看一下例子,简单的控制影片的播放、暂停、前进、后退、停止
点击下载源文件
1、打开flash,按ctrl+F8,新建立一个影片剪辑,并起名字为mo。
需要先做一个简单的移动动画的影片剪辑。
就做一个圆形的滚动效果吧。
图01
2、回到舞台工作区,按F11打开库,将mo影片剪辑拖放到舞台中。
并给这个实例起个名字叫mc。
(现在就可以按ctrl+回车测试效果,你可以看到这个圆形一直在不停的移动。
)
3、添加脚本,现在要让这个mc在影片一开始不要自动播放,不然怎么来控制它呢。
咱们把脚本写在时间轴的关键桢上。
选中时间轴的第一桢,按F9打开动作面板,选择专家模式,输入:
_root.mc.stop();(_root代表舞台,这个脚本的意思就是,舞台上名字叫mc的实例停止播放。
)
图02
4、现在咱们来制作几个按钮,分别表示播放、暂停、前进、后退、停止。
并摆放在舞台上。
关于按钮的制作方法我就不多介绍。
5、现在要添加控制影片的脚本。
这次把脚本直接写在舞台上这些按钮的身上。
选中播放按钮,打开动作面板,输入:
on(release){
_root.mc.play();
}
如果要在按钮身上写脚本的话,必须使用on(事件){//脚本程序}的格式来写!
上面的脚本作用就是:
当你在这个按钮上按一下鼠标(release事件)的时候,就会执行下面的_root.mc.play();程序,它的意思是让舞台上的mc开始播放!
6、同理:
咱们选中舞台上的暂停按钮,在它上面输入:
on(release){
_root.mc.stop()
}
然后依次在快退上输入:
on(release){
_root.mc.prevFrame();//prevFrame表示回到动画的上一桢
}
在快进的按钮上输入:
on(release){
_root.mc.nextFrame();
}
在停止的按钮上输入:
on(release){
_root.mc.gotoAndStop
(1);//跳到mc影片的第一桢,并停止播放!
}
好了,到现在为止就结束啦,你可以按ctrl+回车测试一下你的成果咯。
Flash与Asp的结合使用
Flash的功能已经非常强大,完全可以跟其他的服务器端语言结合起来,做出适合现在的网络应用的网站。
一个典型的模式就是Flash与Asp的结合使用。
其架构如图1所示。
图01
可以把上面的结构看成是三层,Flash是一层,Asp是一层,数据库是一层。
对Flash和Asp有点了解的人,只要处理好层与层之间的交互,结合使用Flash与Asp就决不是什么难事。
一、下面我们就先来看看Flash与Asp之间的交互
Flash与Asp的通讯是用Http协议,其请求格式为http:
//ip地址?
参数1=值1&参数2=值2
即是在目的地址后面加上问号,再跟上参数字符串,参数之间用“&”号格开。
如:
在上面的请求中,请求的目的文件为:
Flash与Asp之间的交互无非就是构造上面的请求字符串。
1、在Flash中,先构造好请求的字符串,然后利用函数LoadVariables(),就可以向服务器端发送请求和参数。
我们来详细看看LoadVariables()这个函数。
函数的标准格式为loadVariables("url",level/"target"[,variables])
在函数的各个参数中,url就是上面说的请求字符串。
level/“target”是返回值的“层次”或者“目标”,这两个当中只能指定一个。
variables是请求的方式,其值可以是“Get”或者是“Post”,一般Get用于参数值比较短的传送,Post用于参数值比较长的传送,这个参数是可选的。
比如loadVariables(",0,“GET”)就是一个完整的请求。
2、在Asp中,先要取得从Flash端传送过来的参数,这跟操作普通的HTML表单是一样的。
都是利用Request对象,其语句为:
username=Request(“userid”)
password=Request(“pwd”)
userid和pwd就是从Flash端发送过来的参数名,如果是上一步中的请求字符串,username的值为guest,pwd的值为123。
3、在服务器端处理完请求,获得所需要的值后,Asp向Flash端发送结果,跟从Asp中操作Html语言一样,都是用Response对象,其语句为:
Response.Write(“login=true&des=success”)
其返回值1的名为login,值为true,返回值2的名为des,值为success。
4、在Flash端取得从服务器端返回的值,与操作Flash中普通的变量没什么不同。
如:
_root.gotoAndPlay(eval(login))表示的是跳转到login的值的那一帧。
但要注意的是在发送请求一段时间之后,才能用返回值,不然取得的是尚未返回的值,错误就在所难免了,而且这一类的错误很难发现,用的时候要多加小心。
二、Asp与数据库之间的交互
在Asp与数据库的交互一般是用ADO控件。
其读取数据库的语句为:
‘定义一个Connection对象
setconn=Server.CreateObject("ADODB.Connection")
‘用Connection对象打开数据库,这里打开的是sqlserver,数据库的地址为192.168.1.32
‘数据库的用户名为zengyu,密码为123
conn.openapplication("Driver={SQLServer};SERVER=192.168.1.32;DATABASE=test;UID=zengyu;PASSWORD=123")
‘创建一个Recordset对象
setrstemp=Server.CreateObject("ADODB.Recordset")
‘构造一个sql语句
sqltemp1="select*fromUserInfowhereuserid='"&strname&"'andpassword='"&strpassword&"'"
‘查询数据库
rstemp.opensqltemp1,conn,1,1
ifnot(rstemp.bofandrstemp.eof)then
Response.Write(“login=true”)
endif
这里实现的只是简单地查询数据库,要想了解Asp操作数据库更详细的东西,可以找Asp与数据库方面的资料深入学习一下。
三、例子――登陆的实现
下面我们来制作一个简单的实例,在Flash端输入用户名和密码,通过Asp查询数据库,如果用户名和密码正确,就跳转到登陆成功界面,否则就跳转到登陆失败界面。
1、新建一个Flash,在场景中制作两个文本框和一个Button,如图2所示。
其中用户名对应的文本框属性如图3所示,密码对应的文本框属性如图4所示。
注意其中的文本类型和变量名。
图02
图03
图04
2、创建另外两个关键帧,分别命名为“true”和“false”,并分别显示“登陆成功”和“登陆失败”字样。
3、在Button的ActionScript中增加下面的语句,注意更改其中的ip地址。
on(release){
loadVariables("http:
//192.168.1.32/guest.asp?
userid="addeval(_root.userid)add"&pwd="addeval(_root.pwd),this,"GET");
now=newDate();
begintime=now.getSeconds();
while(true){
endt=newDate();
endtime=endt.getSeconds();
if(endt-now>2)
{
_root.gotoAndPlay(eval(login));
}
}
}
4、在SqlServer数据库(数据库的类型不重要,改一改连接串就可以的)中,建立一张名为“userinfo”的表,其中有“Userid”和“Password”两个字段。
5、建立一个guest.asp文件,文件内容为
6、将Flash文件和Asp文件部署到IIS服务器中,然后打开Flash文件,输入登陆信息就可以看到实例的效果了。
Flash5ActionScript高级编程指南
(1)
Flash5的ActionScript里新增了许多诱人的函数与功能,使得闪客们得以更大的空间发挥他们高超的闪技。
但同时也带来了不少新的困扰。
下面我们就来讨论一下其中的一些难点和高级应用。
如果您已经看过Flash5ActionScript的联机帮助,或者对FlashActionScript(FAS)已经有了一定的了解的话,相信一定会从本教材中得到不小的收获的。
注:
本教材中的某些概念与Flash5ActionScript的联机帮助中的内容有一定的出入,但笔者是在仔细分析了实现原理及经过了反复的测试后才作如此之改动的。
笔者认为按新的概念更能抓住FAS语法的精髓,望读者予以理解。
一、动作脚本的语法规则
自从Flash4加入了ActionScript——动作脚本编辑之后,Flash渐渐成为广大编程爱好者的又一块处女地。
由于它的出现,许多用纯动画难以制作的场景编绘(比如飘雪)变得轻松写意。
难怪乎许多动画爱好者要把ActionScript称为动画神枪手,指哪儿打哪儿。
然而Flash4中的动作脚本毕竟初出茅庐,还有许多不近人意的地方。
比如没有提供实现三维所必须的三角函数等等。
这就使得不少初学者望而生畏,而高手们在编写复杂脚本时也不得不借助于第三方软件(比如Fast!
)。
在众望所归之下,Flash5终于推出了令人欣喜的脚本编辑器,而脚本的功能也与往日不可同日而语了。
总的来说,新的ActionScript共有三项重大改进:
-与Java和C/C++几乎完全相同的语法风格;
-强大的库函数支持;
-包含直接代码编辑的集成脚本编辑器。
FlashActionScript终于从尝试走向完善。
废话暂时就先说到这儿,下面我们就来仔细讨论一下新的ActionScript的语法和书写规范。
熟悉此项的大虾们也请看一下,说不定有你所不知道的呢!
废话暂时就先说到这儿,下面我们就来仔细讨论一下新的ActionScript的语法和书写规范。
熟悉此项的大虾们也请看一下,说不定有你所不知道的呢!
1、脚本构成
和C++语言一样,Flash脚本也是由对象和函数构成的,只不过FAS里的“对象”实际上是影片片段而已(FAS本身的对象含义不象C++中的对象,倒更象是结构体,因为它没有真正意义上的成员函数,此点我们以后细说)。
但它们之间又有本质区别。
首先,C++中的对象是由类实例化得来的,类可以被继承;而FAS中没有类的概念,所有的影片片段都是现成的,最多只能用attachMovie来动态生成一个非现成的影片片段,或用duplicateMovieClip来复制一个已有的影片片段。
其次,C++中成员函数定义在类声明里,可以被重载,且没有先后顺序;而FAS中所有的函数都定义在某个特定的影片片段中,这也就是说,如果定义函数的那个影格未被播放,函数就不存在;另外FAS中的函数不能被重载,只能被覆盖,系统始终只保留最近被执行的脚本中的函数定义。
比如:
functionmyFunction(a){
trace("1");
}
functionmyFunction(a,b){
trace("2");
}
myFunction
(1);
输出的是2而不是1。
第三,FAS中的影片片段全都是嵌套的,有着深厚的层次关系,只要写明其路径,就能直接调用任何影片片段的成员函数或变量等;而C++中虽然也有对象的嵌套,但只有外层的对象可以直接调用内层对象的公有成员。
2、基本元素
Flash脚本的基本元素有:
变量、数组、对象、影片片段、影片片段)属性和函数。
其中数组(一种特殊的对象)、对象(包括一些预定义对象,如Math)和自定义函数是Flash5中新增的内容。
另外,老版本中的一些指令,象:
setPropery(target,property,value);
等,我们现在也把它们称为函数。
这样一来,其余就只剩下为数不多的一些关键词了,下面一一列出:
code:
-------------------------------------------------------------------------------- #include"..."var
newdelete
if...else...ifFrameLoaded(...)...
for(...)...for(...in...)...
do...while(...)while(...)...
breakcontinue
tellTarget(...)...with(...)...
function...(...){...}return
on(...){...}onClipEvent(...){...}
--------------------------------------------------------------------------------
其中写明要{}的必须加上{},其他如if等在子过程只有一条语句时可省略{}。
具体应用放到以后细讲。
3、语句书写格式
Flash脚本的语句书写基本上与Java和C/C++语言相同。
一条语句可分几行写,也可在同一行中写多个语句。
不同之处有以下几点:
(1)当不会与后一语句产生歧义时,语句末尾的“;”可以省略,但为了分隔同一行内的多个语句则必须要加。
比如:
a=b=
c=1
trace(a);trace(b);trace(c);
不过我们为了统一起见,还是提倡一律如C语言那样加上分号。
(2)变量、对象等无须定义(用var可定义其局部性)就可直接赋值使用,在未赋值前所有标识符都代表一个值为空的无类型变量。
同一标识符可反复赋予不同类型的值。
(3){}可以在任何地方成对加,但无任何实际效果(var只对函数体有效,这在后面会讲到),不象C/C++语言那样有局部作用域功能。
比如:
a=1;
if(a==1){
vara=0;
}
trace(a);
将输出0,而在C/C++中会输出1。
(4)函数可以在任何地方定义。
甚至可以把一个函数定义在另一个函数的体内,就象下面这段程序:
functionmyFunction1(){
functionmyFunction2(){
trace("2");
}
trace("1");
}
myFunction1();
myFunction2();
将输出:
1
2
想想看如果把上面两个函数都定义成myFunction1会有什么结果?
呵呵,结果是输出两个2,道理相信您一定想得明白。
二、点语法对象与目标路径的使用
FlashActionScript里最基础但也往往是最不容易搞清楚的恐怕就要算点语法对象和目标路径的使用了。
不用说初学者常常不知道什么时候该用点语法对象,什么时候该用目标路径,就连能熟练运用三维显示技术的闪客高手有时也会因为概念混淆而用错,而这种错误又往往是最难发现的。
所以,我把它放在第二节来介绍,同时也顺带讲一下与此密切相关的一些指令和函数的使用。
1、形式与含义
形如a.b.c的表达形式即为点语法对象。
它可以指代变量、数组和对象,也可以指代影片片段、属性和函数。
比如:
anyObject.a
b[12].anyArray
_root.anyMovieClip._x
anyMovieClip.anyFunction
等都是合法的点语法对象形式。
一般把这种表示形式与Java或C/C++语言中的类与成员、成员函数的表达相类比,但要注意的是FAS里更强调的是对象的层次,甚至还有_parent、_root之类相对路径的表示形式,它并没有继承等面向对象语言的标准概念。
所以说把它理解为地址或者路径似乎更为恰当一些。
形如"a.b/c"或"a/b:
c"的为目标路径。
它是一个字符串,可以指代变量和对象,也可以指代影片片段和属性,但不能指代数组和函数。
它的分隔符可以有"."、"/"和":
"三种,其中"/"后跟对象和影片片段,":
"后跟变量和属性,"."则都可。
不同的分隔符可以混合使用。
比如:
"anyObject:
a"
"_root/anyMovieClip._x"
等都是合法的目标路径形式。
除了点语法对象是变量形式而目标路径是字符串形式这一根本区别外,它们所表示的含义完全相同,只是在使用上各有侧重而已。
2、具体使用
当我们要对某一已知名称的变量或对象等操作时,应选择点语法对象表达。
比如对变量或属性赋值:
myMovieClip._xscale=150;
myObject.index=16;
_parent.myObjectArray[14].index=10;
又比如调用函数:
myMovieClip._x=myMath.square(length);
当我们要对某一不定名称的变量或对象等操作时,应选择目标路径表达。
比如对一批影片片段的某一属性赋值:
for(i=1;i<10;i++){
set("myMovieClip"+i+"._x",20*i);//2.1式
}
有时我们又要把它们联合起来使用,以弥补点语法对象无法表达不定名称及目标路径无法表达数组和函数的不足。
比如对一批影片片段下的某一对象数组赋值:
for(i=1;i<10;i++){
eval("myMovieClip"+i+".myObjectArray")[0].index=i;//2.2式
}
这是Flash5中所提倡的用法。
所以,从某种意义上来说,目标路径可以看作是在表示源代码。
注意:
有时点语法对象也被当成字符串来用,比如:
a=anyMovieClip+"1",a的值就为"_level0.anyMovieClip1"。
但本质上其实是系统在执行+"1"前自动内部执行了String(anyMovieClip)而已。
其他情况也是一样。
二、点语法对象与目标路径的使用
3、相关函数与指令
eval(expression)是与点语法对象和目标路径的使用有关的最常用的函数。
它的实质是把目标路径转化成点语法对象。
系统先把expression自动转化成字符串,相当于调用了一次String(expression),得到"expression_string"的形式。
这时的"expression_string"必须为目标路径形式(否则无返回值),然后返回"expression_string"所指代的内容。
为什么说是内容而不说是值呢?
这是因为eval(expression)的返回值实际上是一个点语法对象。
比如:
eval("anyMovieClip"+1)._x=200;
仍是合法的语句。
如果说._x的左边是一个值似乎就不合适了。
类似的如前面提到的2.2式。
故对于形如:
c=a+eval("b");
的理解(设b的值为1)不应为c=a+1,而应该是c=a+b。
在处理形如上述2.1式的表达式时,Flash5推荐使用eval函数,即写成:
for(i=1;i<10;i++){
eval("myMovieClip"+i)._x=20*i;
}
另当"expression_string"指代的是一个影片片段时,返回的是形同_level0.anyMovieClip的绝对路径形式,所以就不能使用如_root.eval(expression)之类的调用了。
with与tellTarget也是与点语法对象和目标路径密切相关的指令。
其中with是Flash5中新增加的。
它们的使用格式相同:
with(expression){
...
}
tellTarget(expression){
...
}
expression可以是点语法对象,也可以是目标路径。
对于with来说,expression可指代对象和影片片段,而对于tellTarget来说,expression只能是影片片段。
虽然它们形式上极为相仿(尤其当expression同指影片片段时),但处理过程却并不相同。
试比较(a非myMovieClip的成员变量):
a=1;
with(myMovieClip){
trace(a);//2.3式
}
与
a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FLASH 脚本 编写 方法 基本 使用