Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1737458
  • 博文数量: 358
  • 博客积分: 2180
  • 博客等级: 大尉
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 13:47
文章分类

全部博文(358)

文章存档

2016年(17)

2015年(55)

2014年(9)

2013年(67)

2012年(181)

2011年(29)

分类: 系统运维

2012-02-29 15:04:59

1、var a = Math.abs(-7); // 求绝对值(这里是求-7的)                                                                     
2、function myFunction(myNum) {
var newNum = myNum+5;
return newNum;
}
trace(myFunction(8));
//定义 调用并输出函数值

3、多数情况下,需要用到鼠标光标在主场景中的位置,所以可以使用_root._xmouse和_root._ymouse表示。
onClipEvent (enterFrame) {
_x = _root._xmouse;
_y = _root._ymouse;
}//让影片剪辑和鼠标保持相同坐标

4、将矩形影片剪辑作为遮罩图形
在矩形影片剪辑的动作面板中添加如下ActionScript:
onClipEvent (load) {
xs = _width;
ys = _height;
}
onClipEvent (enterFrame) {
_xscale = 100*(_root._xmouse-_x)/(xs/2);
_yscale = 100*(_root._ymouse-_y)/(ys/2);
}
在load事件中,用变量xs和ys取得影片剪辑初始状态下的宽度和高度值。在enterFrame事件中,计算鼠标位置与矩形影片剪辑中心 的距离,算出它与矩形宽度和高度值的比值,然后作为_xscale和_yscale的值。该动画实现移动鼠标位置以改变遮罩效果

5、Array对象(动作面板的“对象”/“核心”目录)即数组,它用来记录成组的相关或相似变量。创建一个空的数组:
myArray = new Array();
如下所示的ActionScript创建一个确定值的数组并在输出窗口中显示每个元素的值:
weekDay = new Array("SUN", "MON", "TUE", "WED", "TUR", "FRI", "SAT");
for (var i = 0; i<7; i++) {
trace(weekDay);
}

数组中还可以嵌套数组,即构成多维数组,如下所示:
polyArray = new Array();
for (var i = 0; i<3; i++) {
polyArray = new Array(i*3+1, i*3+2, i*3+3, i*3+4);
trace(polyArray[0]+" "+polyArray[1]+" "+polyArray[2]+" "+polyArray[3]);
}
输出窗口中将显示:
1 2 3 4
4 5 6 7
7 8 9 10

--------------------------------------------------------------------------------

判断本机Flash播放器版本并进行下载


ss=System.capabilities.version;
if(substring(ss,5,1)<>"7"){getURL("";,_blank);}//'" target="_blank" >",_blank);}//那个7就是版本号

用奇偶判断来做一个按钮的声音开关
第一帧加入(第一帧空帧):
t=0 //给t赋初值

第二帧加入:
stop(); //停止在第二帧
ms=new Sound //新建一个声音对象ms
ms.attachSound("sound") //空声音对象从库中调用连接名为sound的声音
ms.start() //ms开始播放
ms.onSoundComplete=function () { //当ms这个声音播放完后执行以下AS
ms.start //重复播放ms
}

第二帧上面的控制按钮加入
on (release) { //当鼠标松开的时候执行下面AS
t=t+1 //t的值等于本身的值加1
if (t%2==1) { //如果T取摸2等于1
ms.stop() //则ms停止播放
b=ms.position/1000 //b的值等于现在ms声音停止的位置
} else { //否则
ms.start(b) //ms从刚刚停止的地方(b)开始播放
}
}

实现倒放(可以自行联想作出许多不间断缩放效果,如动态按钮等,曾经我写过一篇这样的教程):
给放在场景中比如有40桢的MC添加如下语句

onClipEvnt(load){
gotoAndStop(40);//影片载入时就跳转到40桢并停止
}

onClipEvent(enterFrame){
prevFrame();//不断的播放前一桢,
}

--------------------------------------------------------------------------------

一些简单的AS和一些程序思路,掌握最好:



1.复制MC并随机设定子MC的相关属性:
duplicateMovieClip("mc","mc"+i,10+i);
setProperty("mc"+i,_x,random(400) );//x坐标
setProperty("mc"+i,_y,random(300) );//y坐标
setProperty("mc"+i,_alpha,random(100) );//透明度属性
i++;
if(i>200){//设定复制的个数;
i=1;
}
--------------------------------------------------------------------------------


2.文字的逐个出现(打字效果)
Frame1: text="引号内是要出现的字";
ll = text.length;// 表示text文本的字符数;
i = 1;//用于控制输出的变量;

Frame4: 
if (itext1 = text.substring(0,i);//从第0个字符开始抽取显示,抽取长度为i;
i++;
}
Frame5:
gotoAndPlay(4);
--------------------------------------------------------------------------------


3.冒泡法排序:
for(i;ifor(j=n;j<=i+1;j--){//内层循环;
if(a[j]temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;//交换位置;
}

--------------------------------------------------------------------------------


4.插入法排序(算法复杂性比冒泡法要小):
for(i=2;i<=n;i++){
j=i;
if(a[j]temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
j--; }
}

--------------------------------------------------------------------------------


5.一个按钮控制声音的播放与停止: 
on(release)
{a=a+1;
if(a%2==1){//奇偶判断;
mysound.stop();
_root.b=int(ji.position/1000);//记录下停止时播放的位置;
}
else{ mysound.start(_root.b);//从上一次停止的位置开始继续播放;
}



--------------------------------------------------------------------------------


6.MC以恒定速度旋转 

onClipEvent (enterFrame) {
_rotation +=6;//设定每次的旋转角度值;



--------------------------------------------------------------------------------

和WEB结合设计中用层来遮住FLASH


1.在flash的parameters里加入  
2. 

遮住场景以外的部分
Stage.scaleMode = "exactFit";

--------------------------------------------------------------------------------

判断输入是否为数字的函数: 


on(release){ 
if(Number(pass)==NaN){//判断输入是否为数字 
pass=""; 


--------------------------------------------------------------------------------

检查E-MAIL的函数: 

function checkemail(email) { 
var str = new String(email); 
var arr_email = str.split("@"); 
if ((arr_email.length != 2) || (arr_email[1].indexOf(".")<1)) { 
return (false); 
} else { 
return (true); 


--------------------------------------------------------------------------------

延时函数: 

function showTime(second, option) { 
//延时函数 
this.createEmptyMovieClip("t_mc", 9999); 
t = getTimer(); 
f = false; 
if ((getTimer()-t)>(second*1000)) { 
option(); 


function go() { 
//加入效果 
jpg2._y = jpg2._y+77; 
jpg2._alpha = jpg2._alpha-15; 

fscommand("fullscreen", "true"); 
createEmptyMovieClip("jpg1", 1); 
createEmptyMovieClip("jpg2", 2); 
jpg1.loadMovie("1.jpg"); 
jpg2.loadMovie("2.jpg"); 
i = 0; 
while (i<=100) { 
showTime(0.1, go); 
i = i+20; 


--------------------------------------------------------------------------------

FLASH中的保留小数的函 

int(你的数*10)/10; 
这样是保留一位 
乘上100就是两位。以此类推 

--------------------------------------------------------------------------------

FLASH脚本实现关机 

flash5: 
fscommand ("exec","rundll"+chr(9)+"user.exe,exitwindows"); 

--------------------------------------------------------------------------------

 

鼠标双击问题! 

lsn_DbClick = new Object(); 
lsn_key = new Object(); 
lsn_DbClick.onMouseDown = function() { 
clickTime = getTimer(); 
if (clickTime-lastClickTime<=300) { 
trace("双击了鼠标"); 

lastClickTime = clickTime; 
}; 
Mouse.addListener(lsn_DbClick); 
time = getTimer()-down_time; 
if (time<300) { 
//双击后的代码部分 

down_time = getTimer(); 


怎样在从另一个swf中获取变量 

loadMovieNum("vars.swf", 1["POST"]); 
_root.onEnterFrame = function() { 
trace(_level1.myvab); 
}; 
//当加载完毕后,输出就有值了... 


鼠标右键及滚轮的代码 

if Key.isDown(2){},(左键的代码是1) 

左键:Key.isToggled(1) 
右键:Key.isToggled(2) 
滚轮:Key.isToggled(4) 
滚轮1:Key.isToggled(4) PC机上用 
滚轮2:Key.isToggled(3) MAC机上用 
未知:Key.isToggled(3) 
this.onEnterFrame = function() { 
if (Key.isDown(2)){ 
trace("asdfjsdjkf"); 



--------------------------------------------------------------------------------

 

实现TAB功能 

获得焦点 
使用Selection.setfocus()函数 
举个例子: 
例如你在主影片中有N个文本框,变量分别为text1,text2.....你想使影片一播放就把焦点落到第一个 
文本框你就在第一FRAME 加AS如下: 
Selection.setfocus("_root.text1"); 

我们可以举一反三 


实现TAB功能 二 

把这个N个文本框做组成一个数组 
numarray=new array("_root.text1","_root.text2",....................."_root.textn"); 
首先获得鼠标焦点 
x=Selection.getfocus();/* x 获得鼠标焦点的一个字符串 
for(i=0;i<=n;i++) 

if(numarray==x){ 
num=i; /*获得当前焦点在数组中的位置 

然后编写TAB键功能 
on (keyPress "") { 
if (num==n){num=0;} 
else{num++;} 

Selection.setfocus(numarray[num]); 


按钮能像window那样用Tab键来转换选择 
用button.onKillFoucus 


--------------------------------------------------------------------------------

*两点间画直线 
*画螺旋线 
*画正方形、圆、椭圆 
*抛物线 
*正弦、余弦线 

使用方法:加到帧中就可 


// 画直线 
// / x1, y1: 起点坐标 
// x2, y2: 终点坐标 
// k是层次 
Movieclip.prototype.drawline = function(x1, y1, x2, y2, k) { 
this.linestyle(1); 
this.moveTo(x1, y1); 
this.lineTo(x2, y2); 
}; 
// 从(0,0)到(100,100)画一条线 
_root.createEmptyMovieClip("mc", 10); 
mc.drawline(0, 0, 100, 100); 
// 画螺旋线 
// w、h为宽和高 
// f控制线的长短,用弧度表示 
Movieclip.prototype.drawhelix = function(w, h, f) { 
for (var i = 0; ithis.lineTo(x=Math.sin(i)*i*w, y=Math.cos(i)*i*h); 
this.linestyle(1); 

}; 
// 以(100,100)为中心画螺旋线 
_root.createEmptyMovieClip("luo", 1); 
with (luo) { 
drawhelix(5, 5, 13); 
_x += 100; 
_y += 100; 

// 多功能函数,可画圆,椭圆,正多边形等 
// n为边数 
Movieclip.prototype.drawmany = function(w, h, n) { 
f = 2*Math.PI; 
for (var i = 0; i<=f/n*(n+1); i += f/n) { 
this.lineTo(x=Math.sin(i)*w, y=Math.cos(i)*h); 
this.linestyle(1); 

}; 
// 画一正五边形 
_root.createEmptyMovieClip("duobian", 2); 
with (duobian) { 
drawmany(50, 50, 5); 
_x += 250; 
_y += 100; 
// 5为多边形的边数,6.3为2pai 

// 画一椭圆 
_root.createEmptyMovieClip("tuo", 3); 
with (tuo) { 
drawmany(25, 50, 100); 
_x += 400; 
_y += 100; 

// 圆 
_root.createEmptyMovieClip("yuan", 4); 
with (yuan) { 
drawmany(50, 50, 100); 
_x += 400; 
_y += 300; 

// 抛物线 
Movieclip.prototype.drawparabola = function(l, r, k) { 
for (var i = -l; i<=r; i += 1) { 
this.lineTo(x=i, y=k*i*i); 
this.linestyle(1); 

}; 
// 调用 
_root.createEmptyMovieClip("parabola", 100); 
with (parabola) { 
drawparabola(50, 50, 0.05); 
_x += 200; 
_y += 200; 
// 顶点坐标 

// 正弦线,余弦类似 
Movieclip.prototype.drawsin = function(n, k) { 
for (var i = 0; i<=90*n; i += 1) { 
this.lineTo(x=i, y=k*Math.sin(i*Math.PI/180)); 
this.linestyle(1); 

}; 
_root.createEmptyMovieClip("sin", 101); 
with (sin) { 
drawsin(4, 50); 
_x += 200; 
_y += 200; 
// 顶点坐标 

Movieclip.prototype.drawwave = function(w, h) { 
for (var i = 0; i<=6.3; i += 0.01) { 
this.lineTo(x=w/Math.cos(i), y=h*Math.sin(i)/Math.cos(i)); 
this.linestyle(1); 

}; 
_root.createEmptyMovieClip("wave", 105); 
with (wave) { 
drawwave(100, 100); 
_x += 200; 
_y += 200; 
// 顶点坐标 


--------------------------------------------------------------------------------

一个动态文本设置alpha函数。 

function setAlpha(obj,alpha){ 
var rgb="0x"+(255*(100-alpha)/100).toString(16); 
rgb=rgb<<16|rgb<<8|rgb; 
obj.backgroundColor|=rgb; 
obj.borderColor|=rgb; 
obj.textColor|=rgb; } 

--------------------------------------------------------------------------------

一个遍历level0中所有MC的instance name的函数。(可以修改一下用在其他范畴) 

 

function readAllMC(){ 
this.MCitem ; 
for(what in _level0){ 
if(typeof(_level0[what])=="movieclip"){ 
this.MCitem[what] = _level0[what]; 





--------------------------------------------------------------------------------

 

设置MovieClip颜色: 

MovieClip.prototype.setColor = function(c_color) 

var mycolor = new Color(this); 
mycolor.setRGB(c_color); 
}; 
//调用: 
yourMovieClip.setColor(0xff0000); 

 

怎样设as,拒绝影片被人用loadMovie导入 

以下as一定要设在最上层桢动作第一行有效 
_root._name = "nn"; 
this.onEnterFrame = function() { 
if (this._name != "nn" || _root.getDepth() != -16384) { 
this.unloadMovie(); 

};

--------------------------------------------------------------------------------


一、Flash与Asp之间的交互

Flash与Asp的通讯是用Http协议,其请求格式为地址?参数1=值1&参数2=值2

即是在目的地址后面加上问号,再跟上参数字符串,参数之间用“&”号格开。如:
&pwd=123

在上面的请求中,请求的目的文件为:,第一个参数名为userid,值为guest,第二个参数名为pwd,值为123。

Flash与Asp之间的交互无非就是构造上面的请求字符串。

1、在Flash中,先构造好请求的字符串,然后利用函数LoadVariables(),就可以向服务器端发送请求和参数。我们来详细看看LoadVariables()这个函数。

函数的标准格式为loadVariables ("url" ,level/"target" [, variables])

在函数的各个参数中,url就是上面说的请求字符串。level/“target”是返回值的“层次”或者“目标”,这两个当中只能指定一个。variables是请求的方式,其值可以是“Get”或者是“Post”,一般Get用于参数值比较短的传送,Post用于参数值比较长的传送,这个参数是可选的。比如loadVariables (" ... p;pwd=123" ,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对象
set conn=Server.CreateObject("ADODB.Connection") 
‘用Connection对象打开数据库,这里打开的是sql server,数据库的地址为192.168.1.32
‘数据库的用户名为zengyu,密码为123
conn.open application("Driver={SQL Server};SERVER=192.168.1.32;DATABASE=test;UID=zengyu;PASSWORD=123")
‘创建一个Recordset对象
set rstemp=Server.CreateObject("ADODB.Recordset")
‘构造一个sql语句
sqltemp1="select * from UserInfo where userid='"&strname&"' and password='"&strpassword&"'"
‘查询数据库
rstemp.open sqltemp1,conn, 1, 1 
if not(rstemp.bof and rstemp.eof) then
Response.Write (“login=true”)
end if

这里实现的只是简单地查询数据库,要想了解Asp操作数据库更详细的东西,可以找Asp与数据库方面的资料深入学习一下。

三、例子――登陆的实现

下面我们来制作一个简单的实例,在Flash端输入用户名和密码,通过Asp查询数据库,如果用户名和密码正确,就跳转到登陆成功界面,否则就跳转到登陆失败界面。

1、新建一个Flash,在场景中制作两个文本框和一个Button,如图2所示。其中用户名对应的文本框属性如图3所示,密码对应的文本框属性如图4所示。注意其中的文本类型和变量名。
2、创建另外两个关键帧,分别命名为“true”和“false”,并分别显示“登陆成功”和“登陆失败”字样。

3、在Button的ActionScript中增加下面的语句,注意更改其中的ip地址。

on (release) {
loadVariables("" add eval(_root.us ... mp;pwd=" add eval(_root.pwd),this, "GET");
now = new Date();
begintime = now.getSeconds();
while(true) {
endt = new Date();
endtime = endt.getSeconds();
if (endt - now > 2)
{
_root.gotoAndPlay(eval(login));
}
}
}

4、在Sql Server数据库(数据库的类型不重要,改一改连接串就可以的)中,建立一张名为“userinfo”的表,其中有“Userid”和“Password”两个字段。

5、建立一个guest.asp文件,文件内容为

<%
username = Request(“userid”)
password = Request(“pwd”)
set conn=Server.CreateObject("ADODB.Connection") 
conn.open application("Driver={SQL Server};SERVER=192.168.1.32;DATABASE=test;UID=zengyu;PASSWORD=123")
set rstemp=Server.CreateObject("ADODB.Recordset")
sqltemp1="select * from UserInfo where userid='"&username&"' and password='"&strpassword&"'"
rstemp.open sqltemp1,conn, 1, 1 
if not(rstemp.bof and rstemp.eof) then
Response.Write (“login=true”)
Else 
Response.Write (“login=false”)
end if
%>

6、将Flash文件和Asp文件部署到IIS服务器中,然后打开Flash文件,输入登陆信息就可以看到实例的效果了。


--------------------------------------------------------------------------------


FLASH调用外部文件详解

Flash加载外部文件
Flash可以通过帧、按扭、影片剪辑来调用外部文件。调用的外部文件包括:外部文本文件、外部程序文件、外部*.swf文件、外部图片文件、外部音乐文件、外部脚本文件。
一.调用外部文本文件:(文本文件开头要以flash中的动态文本框的变量名开头,如
msg=".........."这样的形式,要和编辑的Flash文件放在同一目录下)
1.用工具箱中的文本工具,选择动态文本,给动态文本一个变量名,如:msg,在编辑区拖出一个文本框
2.制作两个按扭(一个调用,一个清除)拖放到场景中。
3.调用按扭上添加AS:
on(release){//松开鼠标后执行下面的代码;
loadVariables("msg.txt",msg);//调用和你编辑的Flash处于同一目录下的msg.txt文本文件到动态文本msg中;
System.useCodepage=true;//使外部文件的中文字符能够正确显示;
}
4.清除按扭上的AS:
on(release){//松开鼠标后清楚动态文本框中的内容;
msg="";
}
5.Ctrl+Enter测试.

当然代码也可以写在帧上:(调用按扭的实例名是bt1,清除按扭的实例名是bt2)
在第一帧上加如下代码:
stop();
_root.bt1.onRelease=function(){
loadVariables("msg.txt",msg);
System.useCodepage=true;
}
_root.bt2.onRelease=function(){
_root.msg="";
}

Ctrl+Enter测试.

调用的外部文本文件能够滚动:
1.用工具箱中的文本工具,选择动态文本,给动态文本一个变量名,如:msg,在编辑区拖出一个文本框
2.新建一层,制作两个按扭(一个调用,一个清除)拖放到此层中
3.新建一层,在动态文本框的右侧用矩形工具画一个竖条,高度和动态文本一样;再制作一个向上的方向"箭头"按F8转为按扭元件;复制一个"箭头"按扭,垂直镜象,使这两个按扭和竖条的两端对齐.
4.调用按扭上的AS:
on(release){//松开鼠标后执行下面的代码;
loadVariables("msg1.txt",msg);//调用msg1.txt文本文件到动态文本框msg中;
System.useCodepage=true;//使外部文件的中文字符能够正确显示;
}
清除按扭上的AS:
on(release){
_root.msg="";//清除动态文本框中的内容;
}
向上的按扭上的AS:
on(press){//在按扭的感应区上每按一次鼠标执行下面的代码;
_root.msg.scroll=_root.msg.scroll-1;//文本向下滚动一行;
}
向下的按扭上的AS:
on(press){//在按扭的感应区上每按一次鼠标执行下面的代码;
_root.msg.scroll=_root.msg.scroll+1;//文本向上滚动一行;
}
Ctrl+Enter测试.

当然代码也可以写在帧上:(调用按扭的实例名是bt1,清除按扭的实例名是bt2,向上按扭的实例名是:up,向下按扭上的实例名是down)
在第一帧上加如下代码:
_root.bt1.onRelease=function(){//松开鼠标后执行下面的代码;
loadVariables("msg1.txt",msg);//调用msg1.txt文本文件到动态文本框msg中;
System.useCodepage=true;//使外部文件的中文字符能够正确显示;
}
_root.bt2.onRelease=function(){//松开鼠标后执行
_root.msg="";//清除动态文本框中的内容;
}
_root.up.onPress=function(){//在向上按扭上每按一次鼠标执行下面的代码;
_root.msg.scroll=_root.msg.scroll-1;//文本向下滚动一行;
}
_root.down.onPress=function(){//在向下按扭上每按一次鼠标执行下面的代码;
_root.msg.scroll=_root.msg.scroll+1;//文本向上滚动一行;
}
Ctrl+Enter测试.

二.调用外部*.swf文件(加载到影片剪辑中):
外部*.swf文件要和编辑的Flash文件放在同一目录下
1.新建立一个空的影片剪辑mymc,把它放在场景中,实例名是:mymc.
2.新建一层,制作两个按扭(一个调用,一个清除)拖放到此层中
3.调用按扭上的AS:
on(release){//鼠标离开按扭后执行下面的代码;
loadMovie("flash8.swf","mymc");//加载外部的"flash8.swf"文件到"mymc"空影片剪辑中;
mymc._x=70;//加载影片的X轴坐标;
mymc._y=20;//加载影片的Y轴坐标;
mymc._xscale=70;//加载影片的宽度;
mymc._yscale=70;//加载影片的高度;
}
清除按扭上的AS:
on(release){//鼠标离开按扭后执行下面的代码
unloadMovie(mymc);//删除用loadMovie加载的*.swf文件;
}
Ctrl+Enter测试

三.调用外部*.swf文件(加载到时间轴上):
外部*.swf文件要和编辑的Flash文件放在同一目录下
1.制作两个按扭(一个调用,一个清除)拖放到场景中
2.调用按扭上的AS:
on(release){//鼠标离开按扭后执行下面的代码
loadMovie("flash8.swf",1);//加载外部的"flash8.swf"文件到场景中,层深为1;
}
清除按扭上的AS:
on(release){//鼠标离开按扭后执行下面的代码
unloadMovie(1);//删除层深为1的用loadMovie所加载的"flash8.swf"文件
}
Ctrl+Enter测试。
当然二和三的代码都可以写在帧上。

四.调用外部图片(加载到影片剪辑中)
外部图片必须和正在编辑的Flash文件放在同一目录下
1.制作两个按扭(一个调用,一个清除)拖放到场景中
2.制作一个空的影片剪辑,拖到场景中,实例名是:mymc;
3.时间轴上第一帧上的AS:
i=0;//定义一个变量i,并且赋初值为0;
调用按扭上的AS:
on(release){//鼠标离开按扭后执行下面的代码;
i++;
if(i>9){//因为外面这有9张图,当变量大于9的时候,让变量为1,这样能够使加载的图片是连续的,即,每点一次按扭,就换一张图,等到换到第9张图,再点按扭,则循环到第一张图(j1.jpg到j9.jpg,因为没有j0.jpg,如果i=0,则会提示没有找到j0.jpg);
i=1;
}
loadMovie(("j"+i)+".jgp",mymc);//从j1.jpg开始加载图片到影片剪辑mymc中;
mymc._x=110;//以下设置加载图片的属性
mymc._y=35;
mymc._xscale=130;
mymc._yscale=130;
}
清除按扭上的AS:
on(release){
unloadMovie(mymc);//删除掉用loadMovie加载到影片剪辑的图片;
}
Ctrl+Enter测试。
当然AS可以写在帧上。

五.调用外部声音文件(加载到场景中)
外部声音文件必须和正在编辑的Flash文件放在同一目录下
1.制作两个按扭(一个调用,一个清除)拖放到场景中
2.调用按扭上的AS:
on(release){//鼠标离开按扭后执行下面的代码;
mySound=new Sound();//建立一个新的声音对象mySound;
mySound.loadSound("zaihuni.mp3",true);//加载外部的*.mp3声音文件到mySound对象中,并且按流的方式播放(参数为false时,是以装载完后播放);
}
清除按扭上的AS:
on(release){
mySound.stop();//当按下清除按扭后,停止声音的播放
}
Ctrl+Enter测试。


--------------------------------------------------------------------------------


加载外部图片


如果你的动画中有很多的图片.如果都放到一个SWF文件.可能打开或是下载会很慢.这样就影响了观看效果及速度,那么你可以利用载入外部图片的方法,只要把图片按名称放到你网上的一个目录里(和你的SWF文件同一个目录),那么就可以解决这个问题 

前十祯你做一个载入LOADING.从第十一祯开始

新建一个图层.起名为AS层

在AS图层的第十一祯加入一个关键祯,然后打开动作面板,加入以下AS

i = 0;//初始化变量
loadMovie ("p040.jpg", "pic");//在播放原始 SWF 文件的同时将p040.jpg 文件
//加载到 Flash Player 中的叫PIC的这个影片剪辑中。

上面的语句是实现了加载一张.我们要它加载多张.所以要用到IF语句.在AS层的第六十祯处加入一个关键祯,打开动作面板,加入AS语句:

i++;//变量i递增
if (i >= 21) {//当变量i递增到>=21时.这里的21是因为我准备了二十一张要加载的图.如果你加载十张.那就把这里的21改为10就可以了
i = 0;//则变量为0,即重新加载
}
loadMovie (("p04" + i) + ".jpg", "pic");//如果不是.则继续加载.这里的p04+i就等p04i.也就是说i是几.这里就是p04*,比如i为12,则p04+i就等于p0412
gotoAndPlay (12);//跳转到第十二祯

所以.在这里给图片起文件名时.就要按照这个原则来起的.准备好的图片要和你的主调用SWF文件入在同一个目录下,或者你也可以加载时用绝对路径,那就要改成""' target="_blank&qu ... XXXX.cn/p04";+i+".jpg"

图片的大小最好是事先调整好的.在你做好的PIC这个加载用的MC里.它的位置是放在XY坐标为0的位置,加载进来图是以这个MC左上角为准的,也就是说加载进来图的左上角与加载用的MC的左上角是重合的
--------------
loadMovie("图片名",newname); 
以上语法以下用法
on(release){
loadMovie("pic.jpg", "mc");
mc._x=50;
mc._y=50
mc._xscale=40;
mc._yscale=40
}

--------------------------------------------------------------------------------

加载外部文本文件的3种方法 

不管那样方法,文本文件要和主文件在同一目录下,再就是在这儿的文本文件名为 b.txt 

*第一种方法txt=

1、创建一个文本框,给此文本框一个变量名txt;
2、文本格式为:动态;
3、选:多行输入
4、在第一帧上增加脚本语言。(按F9)
loadVariablesNum("b.txt",0);//b.txt是文件名,0是场景中的根目录
然后打开poems.txt文件,在记事本里输入:txt= 
注意:在加载之前对文本文件进行转换,另存为Unicode编码格式。

*第二种方法 在主文件帧上输入防乱码的AS
按钮实现引用外部文本文件的效果:
第一步:主场第一帧AS:
System.useCodePage = true;//防止乱码

第二步:在按钮上写AS:
on (release) {
_root.loadVariables("b.txt");//b.txt文本名
}

**第三种方法 使用构造器,将文本拆分为若干字符串来显示.从根本上防止乱码.
,也就是说直接在 txt 里面写东西就行了。代码如下: 

lala = new LoadVars();//构造函数;创建 LoadVars 对象。然后可使用该 LoadVars 对象的方法来发送和加载数据
lala.onData = function(rw) {//当lala被实例化并显示在时间轴上时将触发
a_txt.text = replacePunc(rw);//
};

function replacePunc(str) {//执行将文本拆分为多个字符串
var tempArray = str.split("\r\n");//拆分为多个子字符串
var tempstr = new String();
for (var i = 0; itempstr += tempArray+newline;
}
return tempstr;
}

System.useCodepage = true;//通知 Flash Player使用 传统代码页来解释外部文本
lala.load("b.txt");

本人觉得第三种办法好

--------------------------------------------------------------------------------

利用ShareObject实现Flash数据存储


记得前些天看到有人问flash怎么在本地存储信息的问题
想起在看到的一篇关于SharedObject的文章
挑了一部分翻译了一下,也做了一些补注。
第一次做翻译工作,弄得不好各位多见谅。 

什么是本地ShareObject?

通过flash 6 player,开发人员已就可以在客户端存储数据了,就像cookies一样。ShareObject有两种格式:本地和远程。这篇文章只讨论

本地ShareObject.远程ShareObject一般和flash communication server一起使用。一个本地ShareObject只需要flash 6 player,仅此而已

。很多情况下,ShareObject提供了除cookies外的另一种选择,这是许多开发者没有考虑过的。

存储简单数据

在ShareObject中存储简单数据是相当简单的工作,我们先用ShareObject存储一个用户自定义的对象,然后将讨论用ShareObject存储内建

类的实例的问题。一个用户自定义对象可以这样创建:
myObj = new Object(); //or myObj = {};

在ShareObject中存储myObj是很简单的,首先你需要创建一个本地ShareObject的引用:
myLSO = SharedObject.getLocal("foo");

getLocal方法的第一个参数是ShareObject的名字,getLocal()方法也有第二个可选参数:一个字符串类型的路径。大多数情况下你用不到这个参数,除非你在多个swf文件中共用同一个ShareObject。现在为了在ShareObject中储存数据,你需要给ShareObject指定“数据特性”(data property)。现在创建一个ShareObject引用,以及你想存储的对象,最后存储这个对象到“数据特性”中。
例子:
myLSO = SharedObject.getLocal("foo");myObj = {};myObj.fname = "Jessica";myObj.lname = "Smith";myLSO.data.myObj = myObj 

*
myLocalSharedObject.data
描述:
只读属性,用来存储被存储到“数据特性”中的对象的属性,这些属性可以共享/存储,
每一个属性可以是各种基础数据类型(数组,数字布尔值等)对象。
*

现在myObj已经存储在SharedObject中了,今后你可以通过对SharedObject数据属性的存取来实现对myObj的存取,下面是一个例子,这个例子检测是否数据已经被存储到SharedObject中了,如果没有,它将数据存储进去,如果已经存在,则在输出窗口输出。当你将这些代码放到一个空的电影的第一祯后,你可以运行它一次,然后在运行一次,第二次运行你可以看到你存储的数据被输出。

*
一定要先保存动画,否则你的动画只是在windows临时文件夹中运行,不能存储数据。
****************
myLSO = SharedObject.getLocal("foo");if(myLSO.data.myObj == undefined){ trace("Storing Data, run me again"); myObj = {}; myObj.fname = "Jessica"; myObj.lname = "Smith"; myLSO.data.myObj = myObj; }else{ trace("Retrieving Data"); var firstname = myLSO.data.myObj.fname; var lastname = myLSO.data.myObj.lname; trace("First Name: "+firstname); trace("Last Name: "+lastname); } 

*
运行一次以上后,你可以将程序改为
myLSO = SharedObject.getLocal("foo"); trace("Retrieving Data"); var firstname = myLSO.data.myObj.fname; var lastname = myLSO.data.myObj.lname; trace("First Name: "+firstname); trace("Last Name: "+lastname); 

你会发现无论你重复运行多少次,甚至关闭flash后重新进入,仍然能够得到firstname和lastname的值。
另外你应该可以理解getLocal()方法的参数的作用了,它用来表示你所存储的数据的载体名称,是必不可少的。
例如本例中的数据都存储在名为foo的SharedObject中,只有getLocal("foo"),你才能得到你想要的结果。
*

你还可以存储更多内建类型:数组,布尔值,日期,数字,对象,XML,undefined,null

下面是一个将日期实例存储在SharedObject中的例子:
myLSO = SharedObject.getLocal("DateStorage"); myDate = new Date(); myLSO.data.myDate = myDate; 
*****译者注*****
存储简单数据的方法到这基本上就介绍完了,是不是很简单?
为了方便大家理解,我做了一个简单的例子:

你可以在文本框中输入任何内容,然后点击储存,
以后任何时候你打开这个swf,文本框中总是上一次储存的内容。

我现在想到的对SharedObject最有意思的应用就是游戏存档!
只要将与游戏相关的数据,如时间,分数,等级,屏幕位置等相关数据存储
再在必要的时候提取出来,基本上就算是实现存档取档功能。
希望有兴趣的朋友试试。
另外,在使用SharedObject之前,别忘了把你的Flash Player的文件存储设置为无限制,
如图:

否则,超过了Player文件存储的上限(默认好像10k),ShareObject将不起作用

存储复杂数据一般指得是存储自定义类的实例。这一部分因为时间关系(要复习考试)
没有翻译,等有时间再来跟大家讨论。

--------------------------------------------------------------------------------

加载外部图片及对加载图片的控制 

许多朋友都在问如何load外部的文件,如load jpg 、load swf 、load sound等等 
load进来后又该如何控制?如何进行加载的判断?今天这个小教程讲的是加载外部 

图片(jpg)的问题,在这个小教程里,你可以学会一些小知识,举一反三,相信你会

有所收获。

先看看本例的效果
http://tuliping.topcities.com/loadimage.html

来看看代码及其简析:

Stage.showMenu=false;//屏蔽右键,当然这样无法完全屏蔽
Stage.scaleMode = "noBorder";//播放器无菜单
Stage.scaleMode = "noScale";//禁止缩放
//上面的代码只是个人的爱好。
this.createEmptyMovieClip("preloader", 10000);
this.createEmptyMovieClip("mc", 10001);
//动态创建一 mc,用来装载图片
mc.loadMovie("test.jpg");
//load 一名为test的图片(jpg格式)
mc._visible = false;
//先令mc不可见
/*------------------------------------------------
preloader.onEnterFrame = function() {
var l = mc.getBytesLoaded();
var t = mc.getBytesTotal();
var getPercent = l/t;
loadText = Math.round(getPercent*100)+"%completed";
//一动态文本框的var: loadTest
loadBar._width = getPercent*100;
//进度条的长度,主场景中其 instance name: loadBar
if (l>0 && l>=t) {
mc._visible = 1;
delete this.onEnterFrame;
//加载完毕后令mc可见,并stop loop (delete this.onEnterFrame;)
}
*/ ----------------------这段代码就是用来判断加载的情况
//-------------------------------------------------------------------------------
MovieClip.prototype.jump = function(scale, frequency, quotiety) {
//三个参数,scale--图片的比例 frequency---弹性的频率 quotiety---弹性系数
this.tempo += (scale - this._xscale) * frequency;
this.tempo *= quotiety;
this._xscale = this._yscale += this.tempo;
//令图片位于场景的中间(550X400)
this._x = 275-(this._width/2);
this._y = 200-(this._height/2);

};
//--------图片弹性效果的设置,这种效果你可以用在其它方面,比如按钮

//-----------判断鼠标事件,当鼠标与图片碰撞时调用自定义的函数并赋值
mc.onEnterFrame = function() {
if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
this.jump(70, .9, .6);
} else {
this.jumpl(30, .6, .5);
}
}
};

以上代码都在主场景第一帧。

手动建一MC,画一条线用做进度条,把MC从库中拉到主场景,instance name: loadBar。在主场景中建一动态文本框,用来显示加载的百分比,var: loadTest

后记:加载完毕后就可以对其进行用关的操作,如果没有加载完就进行操

作那是不行的,所以要注意进行加载的判断,这在load外部文件时显得尤其重要。


--------------------------------------------------------------------------------


二.语法相关:

1.首当其冲的还是点语法,他是在编程时用来指明与某个对象的相关的属性和方法,还可用于标识对象的路径。 比如,要获取主场景中的Myball这个影片剪辑的x坐标值语法为_root.Myball._x。这其中还有一个必须引起注意,初学者常常以为这里的Myball是指给库里的对象命名,如图二:

其实这是不对的,在程序中出现的名字,我们习惯上称为实例名,其正确的命名方法是在场景中选定需要命名的对象,然后在其属性面板对其命名,如图三:

当然还有在加载外部的图片,SWF或者直接调用库里的声音,MC,那还可以通过程序本身直接给对象添加实例名,这些技巧以后遇到的时候再给予解释!

点语法的对象名称中有两个特殊的名称:_root和_parent; 其中_root表示主场景,而_parent可以实现读取和设置包容当前物件的父物件的任何属性。我自己不知道是怎么养成的习惯,很少使用_parent,我比较喜欢采用一律从主场景来定位对象的方法。可能有时候这样定位并不如两种定位方法结合来的方便,但是我觉得这样做的最突出的优点是便于差错,因为你的路径一律是从上到下的(从主场景到某个内层的MC或按钮)哪一个层级出了问题很容易看出来,不用在MC和场景间来回切换,查谁是谁的父,谁是谁的子!另外我还有一个习惯,就是即使对象是在主场景中,我也喜欢在控制他的时候加上一个_root 。比如说主场景中的Myball这个MC是个运动的球,要用按钮控制让他停止,下面的语句可以实现:
on(release){
Myball.stop();
}

但是我一般写成:

on(release){
_root.Myball.stop();
}

当然,这只是我的个人习惯,也许大家看了觉得我在自找麻烦。但是,我之所以讲出来,是因为我觉得这是一个习惯,就是保有一种路径的观念在心里。这个应该蛮重要的。

2.关于斜杠语法:
据我所知,斜杠语法是在FLASH 4.0中广泛使用的,也用于指示对象的路径,被用于代替点的作用,当他要指出一个变量是需要在变量前面加上冒号,以表示对变量的引用。由于软件都有一种向下兼容性,所以在MX中仍然可以使用(我没怎么用过2004,估计2004也支持的),但是一般说不推荐使用,一方面,既然被取代了,肯定是因为有缺点,有好的方法了干吗还要抱者旧的不放(你要是怕被人说喜新厌旧,那你就继续用!我是不怕的,挖哈哈......)另一方面,为了和其他人保持一致,大家都用点语法,你一个人用斜杠,总觉得不大好!

3.分号:

编程时,我有在每句话结尾加分号的习惯,其实这个分号是可以省略的,那我为什么要加呢,嘿嘿........那是因为我一开始学习用FLASH编程时,没人告诉我可以不加,我就一直辛辛苦苦的加啊!!!现在改不过来了!挖哈哈..............

4.大小写

FLASH编程时,只有关键字区分大写和小写,何谓关键字,基本上就是你写对了,会变成兰色的那部分程序代码,也就是为本语言专用的一些单词!!比如:setProperty clearInterval getRGB 这些!

5.注释;

添加注释一般是为了方便别人阅读你的程序,添加注释符号//后,其后的内容为灰色;其实他还有一个最大的优点就是,方便你调试程序,比如,编译时发现程序有错,可是程序很长,你不能完全准确的确定错误发生的位置,那么你可以使用// 逐段的屏蔽掉程序段,进而帮助确定错误的位置。

 

--------------------------------------------------------------------------------

三.关于查错:

往往从有思路到编程实现效果不可能一次完成,也就是说,难免会出现错误,不能通过编译系统(不知道FLASH里怎么称呼,说成编译系统对不对咧,还请各位指教)。那这时候就需要我们查错。

1.充分利用输出窗口给出的提示:

例如:在按钮上加如下代码:
duplicateMovieClip("MC","MC"+j,10+j);
c=random(40);
setProperty("MC"+j,_y,(c+30));
setProperty"MC"+j,_x,random(600));
setProperty("MC"+j,_alpha,(2*c+20));
j++;
if(j>700){
j=1;
}

ctrl+enter测试影片,输出窗口提示:

场景=场景 1, 图层=AS, 帧=2: 第 4 行: Unknown error ID #1033
setProperty"MC"+j,_x,random(600));

就是说第四行有错误,回到编辑状态,一看,原来少了半边括号,就是说输出窗口会给我们提供很多必要的帮助,一定要好好利用!让AS编辑区显示行号的方法,如图四:

点一下红色圈中的按钮,选中显示行号即可!其他按钮还可以实现很多辅助功能,自己去看一看就知道了!

2.上述方法只能排除语法上的错误,也就是说,你程序本身算法或者程序中参数的传递,出现了问题,编译系统是不可能帮你检查出来的,这个只能靠你自己去检查。我这里介绍一点自己的方法,供大家参考:首先,你得自己心里想明白按照自己的这个算法思想能不能实现想要的结果,就是说先在心里把整个算法重新再理一遍,有时候想的不成熟,或者一开始的思路有疏漏,这时候应该可以更正或者修改过来!当你确定自己的程序设计思路没有问题但是依然出不了效果时,你就该考虑是程序实现时出了错误,比如参数传递有问题,路径指示不明确甚至错误等等都是比较常见的(至少我就常常犯这样的错误);

举个例子:

在主场景中有一个输入文本,其实例名为text 变量名为xx,
然后主场景的帧上加:

_root.text.onChanged = function() {
n=Number(xx);
};//当文本框内容改变时就把文本框的值赋给n这个变量;

然后在主场景中一个风车状的MC上加:

onClipEvent(enterFrame){
this._rotation=this._rotation+n;
}//意思是让风车旋转,速度为n;

但是测试影片,就是没有效果,为什么呢,想想看,先把风车上的代码改为:
onClipEvent(enterFrame){
this._rotation=this._rotation+3;
}//指定一个数值作为旋转的速度,测试发现,旋转正常;

这就提醒我们,是不是参数传递出了问题呢,哦!!!对,因为在帧上加的代码,所产生的变量n实际是主场景中的变量,把他传递到MC中时,应该确定起准确的位置。再次修改源代码,MC上的代码改为:
onClipEvent(enterFrame){
this._rotation=this._rotation+_root.n;
}

再次测试,一切正常,旋转速度随着输入数字的变化而变化

3.学会使用trace语句,检测错误!

上面的例子中变量比较少,所以很容易发现问题,如果一个程序中有多个变量,而且比较复杂,那就需要分别对他们进行跟踪查看,方法就是利用trace语句,在某个变量每次发生变化后都用trace将其输出,以便查看其运算结果是否和预期的一致!

同样举个例子:随机抽签效果!

十个MC,透明度均为30;

主场景中的关键帧上加:
a =new Array(0,1,2,3,4,5,6,7,8,9);//定义数组;
mm=0;//点击次数统计;
nn=10;//数组元素个数;

选择按钮上加:

on(press){
i = random(nn);
j = a;
a1=a.slice(0,i);
trace(a1);//输出抽取的部分数所组成的新的数组a1;
a2=a.slice(i+1,nn);
trace(a2);//输出抽取的另外一部分数所组成的新的数组a2;
a=a1.concat(a2);
trace(a);//输出组合后的数组,也就是新的数组a;
setProperty("mc"+j,_alpha,getProperty("mc"+j,_alpha)+30);
mm++;
nn--;
if(mm==10){
text="抽签结束!"
mm="10";
_root.but._visible=false;

}
}

采用以上方法后,每点击一次按钮,窗口都输出三排数字,最后一排中比上一次输出少掉的那个数字就是被抽取的数字;这样一来,每运行一次代码,程序人员都可以方便的查看各个变量的运算情况!

源文地址:
dispbbs.asp?boardID=1&ID=141361
PS:

a1=a.slice(0,i);//截取数组a中从第0个到第i个元素组成新数组返回值赋值给数组a1
a2=a.slice(i+1,nn);//截取数组a中从第i+1个到最后一个元素组成新数组返回值赋值给数组a2
a=a1.concat(a2);//连接 a1和a2
setProperty("mc"+j,_alpha,getProperty("mc"+j,_alpha)+30);//把被选中的对象透明度加30;
_root.but._visible=false;//把按钮隐藏; 

--------------------------------------------------------------------------------


FLASH隐藏类公布/使用


MM未公布的Tween/Easing类原教程译文及演示 

FlashMX 2004 未公布的Tween/Easing 类

作者:Devon Wolfgang


正文

I. Tween类

Flash现在支持一个很特别的新类"Tween"类,利用它可以使得很多MC运动效果变得简单.它的使用方法如下:
someTweenID = new mx.transitions.Tween(object, property, function, begin, end, duration, useSeconds) 
参数解释如下:
object:一个您想要增加Tween动作的MC的实例名.
property:该MC的一个属性,即为将要添加Tween动作的属性.
function:easing类的一个方法(下面会提到).
begin:属性开始时的数值.
end:属性结束时的数值.
duration:动作持续的帧数/时间.
useSeconds:一个布尔值,决定是使用帧数计时(为false)还是秒数计时(为true).默认为false.

就这些了,下面我们来看看有哪些easing类中的方法可供使用.

II. Easing类

MX 2004支持16种不同的easing类方法(应该是19种,但是有4种是相同的).泛泛而谈,Easing类中有五大类方法,每一类又

分为3种,最后还有第六类(只提供一个方法,就是什么easing也没有).

具体地说,有以下六类:

Strong
Back
Elastic
Regular
Bounce
None

每类各有四种方法:

easeIn
easeOut
easeInOut
easeNone

None和easeNone是相同的,所以我忽略掉它们. 关于该方法的完整调用应该如下:

mx.transitions.easing.Bounce.easeOut

现在您需要用以上字符串代替"function"占位符.

III.把两者结合起来

好了,现在我们掌握了所有的基本元素,接下来我们做一个完整的动画出来.设想一下我们现在制作了一个实例名为"

ball_mc"的小球,想到从x坐标为20的在方移动到x坐标为380的地方,用时0.5秒,并在最后弹两下.那么我们需要这样写:

ballTween = new mx.transitions.Tween(ball_mc, "_x", mx.transitions.easing.Bounce.easeOut, 20, 380, .5, true);

这串代码真难看! 我们最好把它写成一个函数:

function tweenBall() {
easeType = mx.transitions.easing.Bounce.easeOut;
var begin = 20;
var end = 380;
var time = .5;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time, true);
}

这下看起来好多了.当然,我们还需要调用这个函数.下面我们做一个实例名为"myButton_btn"的按钮.然后在帧上加上如下的

代码:
myButton_btn.onRelease = function() {
tweenBall();//调用Tween
};
function tweenBall() {
easeType = mx.transitions.easing.Bounce.easeOut;
var begin = 20;
var end = 380;
var time = .5;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time, true);


还不错,不过我们还可以改进一下,把easing类方法设为入口参数,这样我们就可以自定义所执行的运动方式了:
myButton_btn.onRelease = function() {
tweenBall(mx.transitions.easing.Bounce.easeOut);//注意入口的easing方法参数
};
function tweenBall(easeType) {//加了一个参数.
var begin = 20;
var end = 380;
var time = 20;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time);
}

注意一点,time变量为20,我们把帧率调成25,然后去掉了最后一个boolean参数"useSeconds".这样运动就以帧为标准了.好了,

现在我们的代码看起来和先前的差不多,但是我们还要加15个差不多的按钮,用来向函数传递不同的参数.

所有按钮只是调用了一个函数,这下就有用多了.

IV.进一步研究

事实上,MM还为该类提供了几个事件和方法.我所找到的最有用的事件就是"onMotionFinished"事件,方法呢?有yoyo()和

rewind().
举个例子,我们想让小球循环对称地运动,只需要这样稍微改一下:

myButton_btn.onRelease = function() {
tweenBall(mx.transitions.easing.Bounce.easeOut);
};
function tweenBall(easeType) {
var begin = 20;
var end = 380;
var time = 20;
var mc = ball_mc;
ballTween = new mx.transitions.Tween(mc, "_x", easeType, begin, end, time);
ballTween.onMotionFinished = function() {
this.yoyo();
};//多了一个事件和方法
}
rewind()方法把增加了Tween运动的MC重置到初始(未增加Tween前)状态.

结论

好了,我知道我还有一些东西没有介绍.因为有些我发现没什么用,有些我根本还不知道怎么用!当然我很清楚了解清楚以

上几点就能够正确地使用Tween/Easing类了.

一点实际例子:

在收到不少Email后,我决定再多给几个例子.毕竟没有人只会想到移动小球.下面的例子会使您看到其用处的.

下面是代码:
navText_array = new Array("Home", "About", "Work", "Play", "Contact");
setUpButtons();
stop();
function setUpButtons() {
var btnCnt = navText_array.length;
for (i=0; ivar temp = this["tab"+i+"_mc"];
temp.navText.text = navText_array;
temp.begin = temp._y;
temp.end = temp._y-100;
temp.time = 8;//为temp添加了三个属性
temp.onRollOver = function() {
easeUp(this);
};
temp.onRollOut = function() {
easeDown(this);
};
}
}
function easeUp(what) {
var tabUp = new mx.transitions.Tween(what, "_y", mx.transitions.easing.Bounce.easeOut, what.begin, 

what.end, what.time);/*这里的what是为类型为MC的参数,调用what.begin等属性.从这里可以看出作者用的是AS1.0语法(如

他自己所说).*/
}
function easeDown(what) {
var begin = what._y;
var tabDown = new mx.transitions.Tween(what, "_y", mx.transitions.easing.Strong.easeIn, begin, what.

begin, what.time);
}

译者按:要实现上面的效果,还要创建btnCnt个实例名为("tab"+i+"_mc")的菜单项.


--------------------------------------------------------------------------------


AS创建文本框

_root.createTextField("mytext", 1, 50, 50, 100,20);
mytext.multilance=false;//设置单行;
mytext.text="这是文本框"//文本赋值
然后是删除这个创建的文本框:
mytext.removeTextField();//删除!

如果大家要创建一个换行的文本框,就需要加上:
mytext.wordWrap =true //指示文本字段自动换行
mytext.autoSize=true //指定文本字段的自动对齐和大小调整


TextField 类的方法摘要

TextField.addListener() 注册一个对象,以便在调用 onChanged 和 onScroller 事件处理函数时接收通知。

TextField.getFontList() 返回播放器的主机系统上字体名称的数组。

TextField.getDepth() 返回文本字段的深度。

TextField.getNewTextFormat() 获取分配给新插入文本的默认文本格式。

TextField.getTextFormat() 返回包含文本字段中一些或全部文本的格式信息的 TextFormat
对象。

TextField.removeListener() 删除侦听器对象。

TextField.removeTextField() 删除使用 MovieClip.createTextField() 创建的文本字段。

TextField.replaceSel() 替换当前的所选内容。

TextField.setNewTextFormat() 为由用户或方法插入的文本设置 TextFormat 对象。

TextField.setTextFormat() 为文本字段中指定范围内的文本设置一个 TextFormat 对象。


TextField 类的属性摘要

TextField._alpha 文本字段实例的透明度值。

TextField.autoSize 控制文本字段的自动对齐和大小调整。

TextField.background 指示文本字段是否具有背景填充。

TextField.backgroundColor 指示背景填充的颜色。

TextField.border 指示文本字段是否具有边框。

TextField.borderColor 指示边框的颜色。

TextField.bottomScroll 文本字段中最下面的可见行。只读。

TextField.embedFonts 指示文本字段是使用嵌入字体轮廓还是使用设备字体。

TextField._height 文本字段实例的高度,以像素为单位。它只影响文本字段的边框,不影响边框的粗细和文本字体大小。 

TextField._highquality 指示 SWF 文件的呈现品质。

TextField.hscroll 指示文本字段的水平滚动值。

TextField.html 指示文本字段的当前最大滚动位置。

TextField.htmlText 包含文本字段内容的 HTML 表示形式。

TextField.length 文本字段中的字符数。只读。

TextField.maxChars 文本字段最多可容纳的字符数。

TextField.maxhscroll TextField.hscroll 的最大值。只读。

TextField.maxscroll TextField.scroll 的最大值。只读。

TextField.menu 将 ContextMenu 对象与文本字段关联。

TextField.mouseWheelEnabled 指示当鼠标指针停在文本字段上且用户滚动鼠标滚轮时,Flash Player 是否应自动滚动多行文本字段。

TextField.multiline 指示文本字段是否包含多行。

TextField._name 文本字段实例的实例名称。

TextField._parent 对此实例的父级实例的引用;其类型为 Button 或 MovieClip。

TextField.password 指示文本字段是否隐藏输入字符。

TextField._quality 指示 SWF 文件的呈现品质。

TextField.restrict 用户可输入文本字段的字符集。

TextField._rotation 文本字段实例的旋转度数。

TextField.scroll 指示文本字段的当前滚动位置。

TextField.selectable 指示文本字段是否可选。

TextField._soundbuftime 在声音进入流之前,必须预先缓冲的声音的时间量。

TextField.tabEnabled 指示影片剪辑是否包括在 Tab 键的自动排序中。

TextField.tabIndex 指示对象的 Tab 键顺序。 

TextField._target 指定文本字段实例的目标路径。只读。

TextField.text 文本字段中的当前文本。

TextField.textColor 文本字段中当前文本的颜色。 

TextField.textHeight 文本字段边框的高度。 

TextField.textWidth 文本字段边框的宽度。

TextField.type 指示文本字段是输入文本字段还是动态文本字段。 

TextField._url 创建文本字段实例的 SWF 文件的 URL。只读。

TextField.variable 与文本字段关联的变量名。

TextField._visible 确定文本字段实例是隐藏还是可见的布尔值。

TextField._width 文本字段实例的宽度,以像素为单位。它只影响文本字段的边框,不影响边框的粗细和文本字体大小。 

TextField.wordWrap 指示文本字段是否自动换行。

TextField._x 文本字段实例的 x 坐标

TextField._xmouse 指针相对于文本字段实例的 x 坐标。只读。

TextField._xscale 指定水平缩放文本字段实例的百分比的值。

TextField._y 文本字段实例的 y 坐标。

TextField._ymouse 指针相对于文本字段实例的 y 坐标。只读。

TextField._yscale 指定垂直缩放文本字段实例的百分比的值。

 

TextField 类的事件处理函数摘要
事件处理函数

TextField.onChanged
在文本字段更改时调用。

TextField.onKillFocus
在文本字段失去焦点时调用。

TextField.onScroller
在文本字段滚动属性之一发生更改时调用。

TextField.onSetFocus
在文本字段接收焦点时调用。

TextField 类的侦听器摘要

TextField.onChanged
在文本字段更改时获得通知。

TextField.onScroller
在文本字段的 scroll 或 maxscroll 属性更改时获得通知。


-------------------------------------------------------------------------------- 

attachSound的部分常用语句

aa=new Sound();//创建一个新音乐
aa.attachSound("jgw");//将库中标识符为jgw的音乐导出播放(标识符在库中链接菜单中命名)
aa.start(0,10000);//音乐播放秒偏移量为0,播放10000次
aa.stop();//停止播放aa这个声音

如果你不想看到Flash的About和设置菜单,把下面的代码放到第一帧就行了:
_root.createTextField("danger", 999, 0, 0, Stage.width, Stage.height);
好了,现在换了一个新菜单.
注:这个适合用在没有交互的动画上,如果你需要使用按钮就去掉.
(这个好像是转载自Dengjie的Blog)

限制flash只能在服务器上观看
在第一帧中加入如下代码:
fscommand ("allowscale", "0"); 
url = "";;//'" target=&quo ... "; //这个换成你的域名
if (_url.substring(0, 20)<>url) { //那个0(h),20(n)就是指从第一个字符开始向后数到第20个字符(包括“://”和“.”符号),这个请自行根据上面的url=后面的来更改
gotoAndPlay (2); 
} else { 
gotoAndPlay (3); 

第二帧加入:
stop (); 
第三帧加入: 
stop (); 
然后把正式内容放在第三帧就好了,第二帧放入出错内容
当然有人说用播放就可以跳过,这里是给出一个思路,你可以用loadmove等等等等等等等等的方法来加载于否正式影片

用ShareObject在本地保存数据(下面文章将较详细讲解)


例(本地保存数据,要想远程保存数据,也可以,跟下边的例子差不多,只不过要安装 flashcom 需要$ 蛮贵的) 
function test(){ 
this.userinfo_so=SharedObject.getLocal("test/userinfo","/"); 
if(this.userinfo_so.data.info == null){ 
this.userinfo_so.data.info=new Object(); 
this.userinfo_so.data.info.username=new Array(); 
this.userinfo_so.data.info.email=new Array(); 

this.setUserinfo=setUserinfo; 
this.getUserinfo=getUserinfo; 
this.delUserinfo=delUserinfo; 

function setUserinfo (username,email) 

with(this.userinfo_so.data){ 
uLength=info.username.length; 
eLength=info.email.length; 
info.username[uLength]=username; 
info.email[eLength]=email; 

var status=this.userinfo_so.flush(); 

function delUserinfo(){ 
this.userinfo_so.data.info=null; 
this.userinfo_so.flush(); 

function getUserinfo (){ 
for(var i=0;itrace(i+":"+this.userinfo_so.data.info.username); 


var gg_so=new test(); 
gg_so.setUserinfo("glghcool","glghcool@etang.com"); 
gg_so.getUserinfo(); 

外部载入文本
动态文本框必须放在MC里面
system.useCodepage = true;
loadVariables ("1.txt",mc)
文本里的最前面是:动态文本框的变量名=你的内容易

判断用户名和密码是否正确,以及根据不同用户名进入不同帧数
用户名的文本框为myname,密码框为mypass
on (release) {
if (myname == "用户名1" && mypass == "密码1") {
gotoAndPlay (85);
} else if (myname == "用户名2" && mypass != "密码2") {
gotoAndPlay (82);
} else if (myname != "用户名3" && mypass == "密码3") {
gotoAndPlay (83);
} else if (myname != "用户名4" && mypass != "密码4") {
gotoAndPlay (84);
}
}

 

FLASH无手指按钮的制作


只需要在第一帧加上:
buttonname.useHandCursor=0
buttonname是你按钮的实例名(不是库里面的名字,属性面板里面的实例名)

FLASH实现设为首页、加入收藏、打开一个制定的新窗口
设为首页: 
on (release) { 
getURL("javascript :void(document.links[0].style.behavior='url(#default#homepage)');void document.links[0].setHomePage('&;#39;);", "_self", "POST"); 


加入收藏夹: 


on (release) { 
getURL("javascript :void window.external.AddFavorite('&;#39;,'闪吧');", "_self", "POST"); 


在Flash中打开一个定制的浏览器新窗口


Get URL ("java script:window.open("new.htm","newwin","width=320,height=320");") 

Loading制作资料(Loading的制作都是使用这些AS,那些样子不同的Loading只是表现手法不一样,AS都是大同小异的,自己看看就明白了)
建一个MC.做一个载入条动画为100祯.拖入主场景中命名实例名为Bar,在载入条下面用文字工具拖一个动态文本框,在右下角加入变量名Percent

第一祯加入祯标签loop,并打开动作面板,输入下面代码:

bt=int((_root.getBytesTotal())/1000);
l=int((_root.getBytesLoaded())/1000);
p=int((l/bt)*100);
Percent=p+"%";//Percent为动态文本变量名.即显示百分比
_root.Bar.gotoAndStop(p);//Bar为载入条的实例名

在第二祯加入

if(p==100){
stopAllSounds();
gotoAndPlay("main");
}else{
gotoAndPlay("loop");
}

动画开始的那一祯加上祯标签main或者这里可以改为跳到下一个场景名或某一祯也可以
loading 制作中的主要AS:
x=Math.floor((_framesloaded/_totalframes)*100);//_framesloaded 表示已下栽的帧数_totalframes 总的帧数
setProperty("_root.load",_xscale,x);// _xscale横向缩放百分比的值
jindu="影片已下载"+_root.x+"%\n 请耐心等待";

第二帧:
输入如下AS:if(x<100){
gotoAndPlay(1);
}else{ jindu=" 下载完毕!";
}

用鼠标画线
onMouseDown=function () {
lineStyle(2,0*000000,100)
lineTo(_xmouse,_ymouse)
}

onMouseMove = function() {
if (a) {
lineStyle(2,0x000000,100);//指定线条的粗度为2,颜色为黑色,透明度为100;
lineTo(_xmouse, _ymouse); //画线至鼠标所在位置;
}
updateAfterEvent(); //强制刷新;Flash 强制进行显示刷新工作。该语句不依赖于时间帧的触发。
};
onMouseDown = function() {
a = true; //鼠标按下,给a变量赋值true,即执行上面的if后面括号内的语句,开始画线;
moveTo(_xmouse, _ymouse);//重新定位开始点;
};
onMouseUp = function() {
a = false; //鼠标松开,给a变量赋值false,不执行上面的if后面括号内的语句,停止画线;
};


-------------------------------------------------------------------------------- 

Tween类写成的全代码弹性菜单


我并不打算详细说说这个菜单,全代码的,大家粘贴到主场景第一帧就可以了,这里只是说说重点.

我定义了两个函数,第一个是创建菜单选项,也就是方块和文字的,第二个创建运动的.我只是把末数量变成参数,这样在rollOver/rollOut时都可以用同一个函数.

最上面三个数组是关于菜单的定义的,包括颜色,文字和URL.

有个小小的技巧在这里面,就是用String(this._name).substr(-1,1) 来获得当前MC的序号,这样就可以把复制出来的MC定义转向到不同的URL.我的另一篇教程也有讲这个,不过说得太长了...(我是有点儿唐僧-___-#).

下面是代码:

mcColorArray = [0xF00000, 0xFF0000, 0xFFF000, 0x0FFF00, 0xFF0FF0, 0xF0FFF0];
//定义菜单方块的颜色
mcText = ["main", "news", "blog", "downloads", "about", "links"];
//定义菜单文字
urlArray=["#1","#2","#3","#4","#5","#6"];
//定义菜单跳转到URL
function createMc(mcName, mcX, mcY, mcDepths, mcColor, mcText) {
_root.createEmptyMovieClip(mcName, mcDepths);
with (eval(mcName)) {
_x = mcX;
_y = mcY;
lineStyle(1, 0x000000, 0);
beginFill(mcColor, 100);
moveTo(30, 30);
lineTo(-30, 30);
lineTo(-30, -30);
lineTo(30, -30);
lineTo(30, 30);
endFill();//定里把菜单定义为正方形
createTextField(mcText, 1, -30, -10, 60, 20);
eval(mcText).text = mcText;
eval(mcText).type = "dynamic";
var myTextFormat = new TextFormat();
myTextFormat.align = "center";
eval(mcText).setTextFormat(myTextFormat);
}
}
//创建菜单选项
function TweenMove(mcID, endData) {
TweenWidth = new mx.transitions.Tween(eval(mcID), "_width", mx.transitions.easing.Elastic.easeOut, eval(mcID)._width, endData, 2, true);
TweenHeight = new mx.transitions.Tween(eval(mcID), "_height", mx.transitions.easing.Elastic.easeOut, eval(mcID)._height, endData, 2, true);
}
//创建运动
for (var i = 0; icreateMc("mcMenu"+i, 50+i*70, 50, i+1984, mcColorArray, mcText);//创建菜单
eval("mcMenu"+i).onRollOver = function() {
TweenMove(this, 80);
};
eval("mcMenu"+i).onRollOut = function() {
TweenMove(this, 60);
};
eval("mcMenu"+i).onRelease=function(){
var urlocation=String(this._name).substr(-1,1);
getURL(urlArray[urlocation],"_blank");
}//定义菜单方法.
}

--------------------------------------------------------------------------------

JavaScript和Macromedia Flash的通信示例


原文地址: www.macromedia.com/support/flash/ts/documents/java_script_comm.htm
说明: 略作修改,主要是一些很初级的操作; 又很多相似的文章,不过这个很权威

下面是一些在Flash和使用Javascript的HTML文件直接通信的示例,每个示例都有简略的步骤

本文讨论了3种基本的Flash/Javascript通信方式:
Javascript 到 Flash的通信----使用Flash播放器的javascript方法
Flash 到 Javascript的通信----使用Flash的fscommand
Flash 到 Flash的通信----------使用本地连接对象或综合上2种技术

并不是所有的浏览器都很重视脚本.为了和Flash播放器通信,浏览器必须有内置的钩子以便Flash播放器可以'监听'.浏览器必须是下列的几种:
Netscape Navigator 3.0-4.7x, 和 Netscape 6.2或更高
(Windows 95/98/NT/2000/XP 或 MacOS; 允许Java和LiveConnect)
Internet Explorer 3.0 或更高
(仅Windows 95/98/NT/2000/XP; 允许ActiveX)

注意:Macintosh上的Internet Explorer和早期版本的Netscape6不支持这种方法.请查看本文的附加信息

--------------------------------------------------------------------------------

Javascript到Flash的通信

这个例子演示了如何使用Flash的method把变量从HTML的input text 发送到该页面中的Flash文件中.HTML input的数据通过Flash的SetVariable方法传送到Flash文件中.

查看示例:示例 
下载源文件: javascript_to_flash.zip(17k)(暂无)

步骤:

Flash中
1.新建一个文件,保存为javascript_to_flash.fla
2.用文字工具在舞台上创建一个文本域
3.选择这个文本域,在属性面板中,从下拉列表中选择动态文本(Dynamic Text),在变量(variable)栏填上"myVar"
注意:最好的习惯是使用Instance,用myVar.text更改myVar的值.为了简单起见和兼容Flash4和Flash5,我们使用的是变量名的形式.
4.保存文件
5.发布HTML文件和SWF文件

Dreamweaver中
下一步的工作转移到Dreamweaver中了,当然也可以是其他的HTML编辑器
1.打开上一步发布的HTML文件
2.插入生成的SWF文件和OBJECT/EMBED标签
(1) Insert>Media>Flash,并选择这个Flash
(2) 切换到代码视图,我们需要修改被选中的标签
(3) 在OBJECT标签中,插入id="myFlash"

codebase="
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注意:如果你是粘贴复制代码的话,确保删除不必要的换行.否则可能会引起错误; id也可以在属性面板里直接输入
(4) 在EMBED标签中,插入name="myFlash"和swLiveConnect="true",确保没有使用id属性!代码应当是这样子的:

type="application/x-shockwave-flash" pluginspage="
P1_Prod_Version=ShockwaveFlash" 
name="myFlash" swLiveConnect="true">
 

3.创建表单域
(1) 回到设计视图
(2) 插入文本域(Insert> Form Object> Text Field),如果询问是否添加表单域,选择是
(3) 把文本域的HTML标签修改成这样:

 
每当文本域内容发生变化时,onChange就被触发,doPassVar()函数就被调用

4.创建传递变量值的Javascript函数
复制下面的Javascript到标签内




5.保存文件,测试一下(F12) 

--------------------------------------------------------------------------------


URL编码:怎样读取特殊字符
从外部文本载入到动态文本的时候,一些特殊字符(如&/%等)无法正常现实,有的符号还会导致这个符号后面的字符无法现实(如&),这时候我们就要将这些特殊字符进行URL编码,以下是各个特殊字符的URL对应编号:
backspace %08 
tab %09 
linefeed %0A 
creturn %0D 
space %20 
! %21 
" %22 
# %23 
$ %24 
% %25 
& %26 
' %27 
( %28 
) %29 
* %2A 
+ %2B 
, %2C 
- %2D 
. %2E 
/ %2F 
0 %30 
1 %31 
2 %32 
3 %33 
4 %34 
5 %35 
6 %36 
7 %37 
8 %38 
9 %39 
: %3A 
; %3B 
< %3C 
= %3D 
> %3E 
? %3F 
@ %40 
A %41 
B %42 
C %43 
D %44 
E %45 
F %46 
G %47 
H %48 
I %49 
J %4A 
K %4B 
L %4C 
M %4D 
N %4E 
O %4F 
P %50 
Q %51 
R %52 
S %53 
T %54 
U %55 
V %56 
W %57 
X %58 
Y %59 
Z %5A 
[ %5B 
\ %5C 
] %5D 
^ %5E 
_ %5F 
` %60 
a %61 
b %62 
c %63 
d %64 
e %65 
f %66 
g %67 
h %68 
i %69 
j %6A 
k %6B 
l %6C 
m %6D 
n %6E 
o %6F 
p %70 
q %71 
r %72 
s %73 
t %74 
u %75 
v %76 
w %77 
x %78 
y %79 
z %7A 
{ %7B 
| %7C 
} %7D 
~ %7E 
¢ %A2 
£ %A3 
¥ %A5 
| %A6 
§ %A7 
? %AB 
? %AC 
ˉ %AD 
o %B0 
± %B1 
a %B2 
, %B4 
μ %B5 
? %BB 
? %BC 
? %BD 
? %BF 
à %C0 
á %C1 
? %C2 
? %C3 
? %C4 
? %C5 
? %C6 
? %C7 
è %C8 
é %C9 
ê %CA 
? %CB 
ì %CC 
í %CD 
? %CE 
? %CF 
D %D0 
? %D1 
ò %D2 
ó %D3 
? %D4 
? %D5 
? %D6 
? %D8 
阅读(3606) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

十七岁的回忆2012-03-02 02:43:49

一个好的习惯决定了一切!