Flashas30实例教程100例.docx
《Flashas30实例教程100例.docx》由会员分享,可在线阅读,更多相关《Flashas30实例教程100例.docx(281页珍藏版)》请在冰点文库上搜索。
![Flashas30实例教程100例.docx](https://file1.bingdoc.com/fileroot1/2023-7/21/002eeb6a-721f-4e8d-9729-a62ccdcded77/002eeb6a-721f-4e8d-9729-a62ccdcded771.gif)
Flashas30实例教程100例
实例一利用缓动类实现图片滚动点击放大效果
//缓动类不在flash包中在fl包中所以要先导入
importfl.transitions.Tween。
//导入缓动类
importfl.transitions.TweenEvent。
//导入缓动事件
importfl.transitions.easing.Regular。
//导入缓动效果中有规律的
vararrTupian:
Array=[]。
//存放图片的数组
vartweenscaleX:
Tween。
//用来控制图片宽高的缓动类
vartweenscaleY:
Tween。
vardatu:
MovieClip。
for(vari:
int=0。
i<8。
i++>{
varxiaotu:
MovieClip=newPic(>。
//这里Pic是库中一个存放图片的类文件
addChild(xiaotu>。
xiaotu.gotoAndStop(i+1>。
xiaotu.width=120。
xiaotu.height=100。
xiaotu.x=xiaotu.width/2+i*(xiaotu.width+10>。
xiaotu.y=420。
arrTupian.push(xiaotu>。
xiaotu.addEventListener(Event.ENTER_FRAME,dongf>。
//为每个小球添加移动帧频函数
}
functiondongf(e>{
varmc:
MovieClip=e.target。
mc.x-=6。
if(mc.x<0-(xiaotu.width/2+10>>{//如果该图片出了场景则放在最后一张图片的位置
mc.x=xiaotu.width/2+7*(xiaotu.width+10>。
}
mc.buttonMode=true。
mc.addEventListener(MouseEvent.MOUSE_OVER,overf>。
///鼠标移过时候停止移动
mc.addEventListener(MouseEvent.MOUSE_OUT,outf>。
//
}
functionoverf(e>{
for(i=0。
ii++>{
//注意是点击一张图片应该让所有的图片都移除移动的侦听
arrTupian[i].removeEventListener(Event.ENTER_FRAME,dongf>。
arrTupian[i].removeEventListener(MouseEvent.MOUSE_OVER,overf>。
//注意也要把移过函数移除,等下次再调用再添加防止下面的效果还没有达到又开始此函数
}
//此时大图出现
datu=newPic(>。
datu.gotoAndStop(arrTupian.indexOf(e.target>+1>。
addChild(datu>。
datu.x=stage.stageWidth/2。
datu.y=200。
tweenscaleX=newTween(datu,"scaleX",Regular.easeOut,1,3,0.5,true>。
//参数从1倍扩大到3倍
tweenscaleY=newTween(datu,"scaleY",Regular.easeOut,1,3,0.5,true>。
//参数分别是对象,属性,缓动类型,开始参数,结束参数,缓动事件,true表示为单位为妙false表示为帧
}
functionoutf(e>{
e.target.removeEventListener(MouseEvent.MOUSE_OVER,overf>。
e.target.removeEventListener(MouseEvent.MOUSE_OVER,outf>。
tweenscaleX=newTween(datu,"scaleX",Regular.easeOut,3,1,0.5,true>。
//开始和结束的参数反过来则实现了缩小的效果
tweenscaleY=newTween(datu,"scaleY",Regular.easeOut,3,1,0.5,true>。
//tweenScaleX=newTween.yoyo(>或者用这个方法,表示实现原来缓动的相反过程
//tweenScaleY=newTween.yoyo(>
tweenscaleX.addEventListener(TweenEvent.MOTION_FINISH,fishf>。
}
functionfishf(e>{
removeChild(datu>。
datu=null。
//注意从显示列表中清除后,
//元件本身还有东西,因此还要把大图元件清空
for(i=0。
ii++>{
arrTupian[i].addEventListener(Event.ENTER_FRAME,dongf>。
}
实例二利用timer类实现图片的切换
场景中有一个pic图片多帧元件,currnum和totalnum两个动态文本speed输入文本,一个msg动态文本
vartimer:
Timer。
speed.text="2"//播放的初始速度为1000毫秒
btn.addEventListener(MouseEvent.CLICK,f>。
functionf(e>{
msg.text=""
timer=newTimer(1000*Number(speed.text>,pic.totalFrames>。
//计时器运行的时间单位都是毫秒,因此输入的速度都是秒应该再乘以1000.
//输入的文本都是字符串因此要转化成数字
timer.start(>。
timer.addEventListener(TimerEvent.TIMER,timerf>。
timer.addEventListener(TimerEvent.TIMER_COMPLETE,comf>//添加一个播放完后的函数
}
functiontimerf(e>{
pic.gotoAndStop(timer.currentCount>。
//图片播放的张数及为计时器运行的当前次数
//例如运行一次既是第一张,两次则为第二张
currnum.text=String(timer.currentCount>。
totalnum.text=String(timer.repeatCount>。
//计时器总共运行的次数
}
functioncomf(e>{
msg.text="图片已经播放完毕谢谢欣赏"//信息文本框的文本显示内容
}
varformat:
TextFormat=newTextFormat("Impact",15,0xff00ff,true>。
vartxt:
TextField=newTextField(>。
addChildAt(txt,numChildren-1>。
txt.text="这里随便写些东西"。
txt.wordWrap=true。
txt.setTextFormat(format>。
txt.width=txt.textWidth。
txt.height=txt.textHeight。
txt.x=10,txt.y=33。
实例三点击小图看大图效果
vartargetArr:
Array=[]。
varpointArr:
Array=[]。
varpicArr:
Array=[]。
varindex:
int。
vartargetPoint=newPoint(275,200>。
for(vari:
int=0。
i<20。
i++>{
varpoint:
Point=newPoint(>。
vartargetP:
Point=newPoint(>。
//varC:
Class=getDefinitionByName("cat"+i>asClass。
/加载同路径文件夹中的名字为cat+i20张的图片
varbmd:
BitmapData=newC(0,0>。
//库中一个图片类文件
varbmp:
Bitmap=newBitmap(bmd>。
varmc:
MovieClip=newMovieClip(>。
addChild(mc>。
mc.addChild(bmp>。
bmp.x=-bmp.width/2。
bmp.y=-bmp.height/2。
mc.scaleX=mc.scaleY=.4。
i<6?
(mc.x=2.5+mc.width/2+i*(mc.width+10>,mc.y=mc.height/2>:
0。
//上面六个图片的位置,坐标为图片的中心
i>=6&&i<10?
(mc.x=550-mc.width/2-2.5,mc.y=mc.height/2+mc.height+8+(i-6>*(mc.height+8>>:
0。
//右边四张图片的坐标
i>=10&&i<16?
(mc.x=550-mc.width/2-2.5-(i-10>*(mc.width+10>,mc.y=400-mc.height/2>:
0。
//下面六张图片坐标
i>=16&&i<20?
(mc.x=mc.width/2+2.5,mc.y=400-mc.height/2-mc.height-8-(i-16>*(mc.height+8>>:
0。
//左边四张图片的坐标
point.x=targetP.x=mc.x,point.y=targetP.y=mc.y。
//记录此时每张图片的位置
mc.mouseChildren=false。
mc.n=i。
//定义mc的私有属性记录每张图片的索引值
picArr.push(mc>。
//
targetArr.push(targetP>。
pointArr.push(point>。
}
vartimer:
Timer=newTimer(1000>。
timer.start(>。
timer.addEventListener(TimerEvent.TIMER,picMove>。
vark:
int=0。
functionpicMove(e>{//图片移动效果
k++。
for(varj:
int=0。
jj++>{
targetArr[j].x=pointArr[(k+j>%pointArr.length].x。
//当前点的坐标随着k的增加等于目标点坐标循环变换
targetArr[j].y=pointArr[(k+j>%pointArr.length].y。
if(picArr[j].x==275&&picArr[j].y==200>{//说明是中心位置的图片
continue。
}else{//说明是周围的图片
picArr[j].x=pointArr[(k+j>%pointArr.length].x。
//让每张图片的坐标循环变换
picArr[j].y=pointArr[(k+j>%pointArr.length].y。
}
}
}
for(i=0。
ii++>{
picArr[i].buttonMode=true。
picArr[i].addEventListener(MouseEvent.CLICK,clickF>。
}
functionclickF(e>{
setChildIndex(e.target,numChildren-2>。
//先把当前被点击的图片放在第二层
objMove(e.target,targetPoint,1,1>。
if(picArr[index].x==275,picArr[index].y==200>{
objMove(picArr[index],targetArr[index],.15,.15>。
}
index=e.target.n。
}
functionobjMove(displayObject:
DisplayObject,targetObj:
Point,targetScalex:
Number,targetScaley:
Number>{
///**/参数分别是当前对象,当前点,x方向的缩放值,y方向上的缩放值
timer.stop(>。
//先让计时器停止,即点击图片动画过程中让图片移动的事件停止
displayObject.addEventListener(Event.ENTER_FRAME,frame>。
functionframe(e>{
for(vari:
int=0。
ii++>{
picArr[i].mouseEnabled=false。
picArr[i].buttonMode=false。
picArr[i].removeEventListener(MouseEvent.CLICK,clickF>。
//
点击每张图片后马上先移除点击事件
}
e.target.x+=(targetObj.x-e.target.x>/5。
//缓动公式实现缓动效果
e.target.y+=(targetObj.y-e.target.y>/5。
e.target.scaleX+=(targetScalex-e.target.scaleX>/5。
e.target.scaleY+=(targetScaley-e.target.scaleY>/5。
vardis:
Number=Math.sqrt((targetObj.x-e.target.x>*(targetObj.x-e.target.x>+(targetObj.y-e.target.y>*(targetObj.y-e.target.y>>。
if(Math.abs(dis><1>{//目标点和当前点的距离
e.target.x=targetObj.x。
e.target.y=targetObj.y。
displayObject.removeEventListener(Event.ENTER_FRAME,frame>。
//图片达到目标点后移除该帧频事件
trace("ok">。
for(i=0。
ii++>{//然后给每张图片再重新添加点击事件
picArr[i].addEventListener(MouseEvent.CLICK,clickF>。
picArr[i].buttonMode=true。
picArr[i].mouseEnabled=true。
}
timer.start(>。
//计时器开始运行,即周围图片继续移动
}
}
}
varsp:
Sprite=newSprite(>。
//画相框
addChild(sp>。
sp.x=275。
sp.y=200。
sp.graphics.lineStyle(15,0xb66700>。
sp.graphics.drawRect(-174,-124,348,248>。
sp.graphics.lineStyle(2,0xa95401>。
sp.graphics.drawRoundRect(-177,-127,354,254,10,10>。
sp.graphics.lineStyle(3,0xa95401>。
sp.graphics.drawRoundRect(-173,-123,346,246,10,10>。
sp.graphics.lineStyle(1.5,0xa95401>。
sp.graphics.moveTo(-178,-128>。
sp.graphics.lineTo(-168,-118>。
sp.graphics.moveTo(178,-128>。
sp.graphics.lineTo(168,-118>。
sp.graphics.moveTo(178,128>。
sp.graphics.lineTo(168,118>。
sp.graphics.moveTo(-178,128>。
sp.graphics.lineTo(-168,118>。
sp.filters=[newBevelFilter(3,45,0xff9900,1,0x660000,1,5,5,1,3>,newDropShadowFilter(4,45,0,1,5,5,.5,3>]。
//=======
varformat:
TextFormat=newTextFormat("Impact",15,0xff00ff,true>。
vartxt:
TextField=newTextField(>。
addChildAt(txt,numChildren-1>。
txt.text="这里随便写些东西"。
txt.wordWrap=true。
txt.setTextFormat(format>。
txt.width=txt.textWidth。
txt.height=txt.textHeight。
txt.x=10,txt.y=33。
实例四条形遮罩
constW:
Number=stage.stageWidth。
constH:
Number=stage.stageHeight。
varpicSpr:
Sprite=addChild(newSprite(>>asSprite。
//用来装矩形条的容器
varpic1:
MovieClip=picSpr.addChild(newPic(>>asMovieClip。
//实例化两个图集
varpic2:
MovieClip=picSpr.addChild(newPic(>>asMovieClip。
varmaskSpr:
Sprite=picSpr.addChild(newSprite(>>asSprite。
pic2.gotoAndStop(3>。
//因为遮罩另一个图集所以先把另一个跳转到第二帧
pic2.mask=maskSpr。
//矩形条容器遮罩图集二
//=====画矩形条函数
functionRect(w:
Number,h:
Number>:
Sprite{
varrect:
Sprite=maskSpr.addChild(newSprite(>>asSprite。
rect.graphics.beginFill(0>。
rect.graphics.drawRect(0,0,w,h>。
rect.graphics.endFill(>。
returnrect。
}
varnum:
uint=80。
//矩形条的总条数
varrw:
Number=W/num。
//竖条的宽度
varrh:
Number=H/num。
//横条的宽度
varn:
uint=0。
//用来控制矩形的条数变化
varbl:
Boolean=true。
//用来控制矩形条的偶数情况和奇数情况
vara:
uint=4*Math.random(>。
//矩形条的从四种不同方向出现
vartimerA:
Timer=newTimer(40,80>。
//控制每一个矩形条出现的时间,共执行八十次
vartimerB:
Timer=newTimer(3000,1>。
//用来控制每一个效果完成后间隔的时间
timerA.start(>。
timerA.addEventListener(TimerEvent.TIMER,ttA>。
functionttA(evt:
TimerEvent>:
void{
varrectH:
Sprite=Rect(rw,H>。
//实例化竖条
varrectW:
Sprite=Rect(W,rh>。
//实例化横条
switch(a>{
case0:
if(bl==true>{//当为真时,出现奇数条第一种效果从左上角出现
rectH.x=2*n*rw。
//横坐标以竖条的宽度2倍增加即每隔一个宽度增加一个
rectW.y=2*n*rh。
//同上
2*n==num-2?
[n=0,bl=false]:
0。
//当n增加到最大值时,变为逆向出现偶竖条
}else{
rectH.x=W-(2*n-1>*rw。
rectW.y=H-(2*n-1>*rh。
}
break。
case1:
if(bl==true>{//第二种效果从右下角出现
rectH.x=W-(2*n+1>*rw。
//
rectW.y=H-(2*n+1>*rh。
2*n==num-2?
[n=0,bl=false]:
0。
}else{
rectH.x=(2*n-1>*rw。
rectW.y=(2*n-1>*rh。
}
break。
case2:
if(bl==true>{//第三种效果从左下角出现
rectH.x=2*n*rw。
rectW.y=H-(2*n+1>*rh。
2*n==num-2?
[n=0,bl=false]:
0。
}else{
rectH.x=W-(2*n-1>*rw。
rectW.y=2*(n-1>*rh。
}
break。
default:
if(bl==true>{//第四种效果从右上角出现
rectH.x=W-(2*n+1>*rw。
rectW.y=2*n*rh。
2*n==num-2?
[n=0,bl=false]:
0。
}else{
rectH.x=2*(n-1>*rw。
rectW.y=H-(2*n-1>*rh。
}
}
n++。
if(timerA.currentCount==timerA.repeatCount>{//如果当前执行次数等于总次数说明已经完成了实例化的80条矩形条
for(vari:
uint=maskSpr.numChildren。
i>0。
i-->{//就删除所有的矩形条
maskSpr.removeChildAt(0>。
}
pic1.currentFrame==pic1.totalFrames?
pic1.gotoAndStop(1>:
pic1.nextFrame(>。
//图片集播放到末尾循环从头开始
pic2.currentFrame==pic2.totalFrames?
pic2.gotoAndStop(1>:
pic2.nextFrame(>。
timerB.start(>。
//添加第二个时间侦听器间隔时间为3秒
}
}
timerB.addEventListener(TimerEvent.TIMER,ttB>。
functionttB(evt:
TimerEvent>:
void{
a=4*Math.random(>。
n=0。
bl=true。
timerA.reset(>。
timer