Flash 特效制作常用的源代码放送Word下载.docx
《Flash 特效制作常用的源代码放送Word下载.docx》由会员分享,可在线阅读,更多相关《Flash 特效制作常用的源代码放送Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
10,name:
"
+i}
*程序控制角色运动
下面这段代码控制MovieClipmc从(50,50)横向运动到(100,50)停止,速度为5pixel:
mc._x=mc._y=50;
mc.onEnterFrame=function(){
_x+=5;
trace(_x);
if(_x==100){
delete(mc.onEnterFrame);
};
*精确计时
我们设定了时间为60秒,然后通过setInterval来定期(每1000milliseconds)触发一个函数runTimer。
functionrunTimer用来计时,当时间到了以后,转去执行outThere。
functionoutThere用来处理时间到了以后的动作,不要忘记clearInterval(intervalID),停止计时。
vartime:
Number=60;
varintervalID:
Number;
intervalID=setInterval(runTimer,1000);
functionrunTimer(){
time--;
trace(time);
if(time==0){
outThere();
functionoutThere(){
//blahblahblah
clearInterval(intervalID);
}*找到目前最小的一个可用的深度Depth(来自国外)
针对FlashPlayer6的:
availTopDepth=function(){
varallDepths=[];
for(varzin_root){
if(_root[z]instanceofButton||_root[z]instanceofMovieClip||_root[z]instanceofTextField){
allDepths.push(_root[z].getDepth());
if(allDepths.length!
=0){
sortAll=function(a,b){if(ab){return1;
}else{return0;
}};
allDepths.sort(sortAll);
return(parseInt(allDepths[allDepths.length-1])+1);
trace(_root.availTopDepth());
放置一个MovieClip在Stage,再执行这段Action就会得到最近的一个可用深度。
*鼠标消隐
鼠标消隐之后,右健弹出菜单,鼠标就又出现了,并且一直保留着~完整的解决方法是:
在左健抬起,右健第二次抬起,回车键抬起的时候再次消隐鼠标。
完整的方法比较复杂,下面是一个简单的解决方法,可以解决绝大多数的问题:
onEnterFrame=function(){
if(Key.isDown
(1)||Key.isDown(Key.ENTER)){
Mouse.hide();
}*我常用的一个加速度移动的代码
以下是引用片段:
//以下代码放到主场景第一帧
stop();
_global.a=5;
//移动加速度,越大越慢
_global.click_x=0;
//用来记录点击鼠标的位置
_global.click_y=0;
_root.onMouseDown=function(){
_global.click_x=_root._xmouse;
_global.click_y=_root._ymouse;
//me是受控mc的instancename
me.onEnterFrame=function(){
if(Math.abs(_global.click_x-me._x)<
2&
&
Math.abs(_global.click_y-me._y)<
2){
//如果已经基本移到了鼠标点过的位置就取消这个事件句柄的响应程序
delete(this.onEnterFrame);
return;
}else{
//控制移动
me._x+=(_global.click_x-me._x)/_global.a;
me._y+=(_global.click_y-me._y)/_global.a;
//////以下部分可选
//a_v是个可以输入的文本框,用来输入加速度,即可以自定义速度,方便调试
a_v.onChanged=function(){
if(a_v.text=="
||Number(a_v.text)>
1000||Number(a_v.text)<
0){
//defaultvalue
a_v.text=5;
_global.a=Number(a_v.text)?
Number(a_v.text):
5;
//trace(_global.a);
*随机输出1到100而不重复的语句:
seq=newArray(100);
pArray=newArray(100);
functionmakeRandom(){
for(i=1;
=100;
seq[i]="
A"
functionmRandom(){
while(true){
n=int(random(100))+1;
if(seq[n]=="
){
seq[n]="
0"
break;
return(n);
functionrArray(){
pArray[i]=mRandom();
trace(pArray[i]);
*偷梁换柱
我们可以用这样一个技巧,在某些函数外部加一些东西而不需要了解函数的代码~~比如,假如当前有很多mc覆盖了onEnterFrame函数,我们可以这样了解那些在_root下的mc的onEnterFrame函数是以什么顺序执行的:
代码:
for(variin_root){
if(_root[i].onEnterFrame!
=null){//如果这个Object实现了onEnterFrame接口的话
_root[i].oldFunc=_root[i].onEnterFrame;
//首先保存原来的onEnterFrame的句柄
_root[i].onEnterFrame=function(){//然后开始替换了~~加上一层壳~~
trace(this+"
:
onEnterFrameCalled."
);
this.oldFunc();
//我们用保留的句柄调用原来的函数
onEnterFrameReturned."
如果要取消这些附加的操作:
if(_root[i].oldFunc!
=null){//如果发现改过得痕迹
_root[i].onEnterFrame=_root[i].oldFunc;
delete(oldFunc);
}呵呵这些操作的关键在于Flash里面的引用机制:
所有函数名都是引用,而函数本身是浮在数据的海洋里面的。
如果没有任何变量引用他,他就会被回收。
如果有,他就不会被回收。
所以有着样一个有趣的事情:
delete函数不会删掉任何东西,除了要求删掉的那个名字:
(和java机制相似,而和C不同)
a=function(){trace("
Functionacalled"
}
b=a;
delete(a);
//除了a这个名字被删掉以外,没有任何事情发生
b();
函数通过this得到其调用者的实例。
MovieClipPlus.as定义了一些简单的MC操作.//画点:
由于Flash没有画点,那我们就画短线:
MovieClip.prototype.point=OxMovieClipPoint;
functionOxMovieClipPoint(x,y){
this.moveTo(x,y);
this.lineTo(x+1,y);
}//画矩形,左上角x1,y1右下角x2,y2,颜色rgb,不透明度alpha
MovieClip.prototype.rect=OxMovieClipRect;
functionOxMovieClipRect(x1,y1,x2,y2,rgb,alpha){
this.beginFill(rgb,alpha);
this.moveTo(x1,y1);
this.lineTo(x1,y2);
this.lineTo(x2,y2);
this.lineTo(x2,y1);
this.lineTo(x1,y1);
this.endFill();
//画圆:
这么bt的冬冬当然不是我写的,作者素JodyKeating
//圆心x,y,半径r
MovieClip.prototype.circle=OxMovieClipCircle;
functionOxMovieClipCircle(x,y,r){
vara=r*0.414213562;
varb=r*0.707106781;
this.moveTo(x+r,y);
this.curveTo(x+r,y-a,x+b,y-b);
this.curveTo(x+a,y-r,x,y-r);
this.curveTo(x-a,y-r,x-b,y-b);
this.curveTo(x-r,y-a,x-r,y);
this.curveTo(x-r,y+a,x-b,y+b);
this.curveTo(x-a,y+r,x,y+r);
this.curveTo(x+a,y+r,x+b,y+b);
this.curveTo(x+r,y+a,x+r,y);
}
*两点间的直线移动
vars=15;
varoldM_x=_root._xmouse;
varoldM_y=_root._ymouse;
ax=aa._x;
ay=aa._y;
dis=Math.sqrt((oldM_x-ax)*(oldM_x-ax)+(oldM_y-ay)*(oldM_y-ay));
xa=(oldM_x-ax)/dis;
ya=(oldM_y-ay)/dis;
amove();
functionamove(){
onEnterFrame=function(){
aa._x+=s*xa;
aa._y+=s*ya;
if(Math.sqrt((aa._x-ax)*(aa._x-ax)+(aa._y-ay)*(aa._y-ay))>
dis){
deleteonEnterFrame;
*计算两个对象之间/两点之间的距离(注册点)
functiongetDistanceOf(target1,target2,x2,y2){
if(arguments.length==4){
dx=x2-target1;
dy=y2-target2;
}elseif(arguments.length==2){
dx=target2._x-target1._x;
dy=target2._y-target1._y;
returnMath.sqrt(dx*dx+dy*dy);
//Arguments对象是一个数组,其中包含作为参数传递给任何函数的值。
每次在动作脚本中调用函数时,都会为该函数自动创建Arguments对象。
同时还会创建一个局部变量arguments,使您可引用arguments对象。
*让播放的MC暂停一段时间
functionpausePlay(sec){
pfunc=function(){
this.play();
clearInterval(this.pint);
this.pint=setInterval(this,"
pfunc"
sec*1000);
//这样调用.sec是暂停的时间,单位是秒.
pausePlay
(2);
onHitTest(target),自己写的一个MC事件,当该MC与指定的MChitTest的时候触发事件.其实也没什么特别的地方,一样也是用setInterval来实现.
stop();
MovieClip.prototype.listen=function(target){
if(this.isHiting==undefined){
this.isHiting=this.hitTest(target);
if(this.hitTest(target)){
if(this.isHiting==false){
this.broadcastMessage("
onHitTest"
this,target);
//广播事件,给事件传递this和target两个参数
this.isHiting=true;
this.isHiting=false;
//为MovieClip添加域成员listen成员,用于监视当前对象与目标是否碰撞
MovieClip.prototype.watch=function(target){
this.timer=setInterval(this,"
listen"
50,target);
//以每50毫秒检测一次的速度来检测是否碰撞
MovieClip.prototype.unWatch=function(){
clearInterval(this.timer);
//停止对对象的监视
ASBroadcaster.initialize(MovieClip.prototype);
//初始化MovieClip原型为事件源
//下面是调用的示例
//假设有两个MovieClip,左边ball,右边wall,让ball不断往wall移动,同时监视wall,一旦击中触发事件onHitTest
ball.onEnterFrame=function(){
this._x+=5;
//让ball不断往右方移动工
myListener=newObject();
myListener.onHitTest=function(source,target){
trace("
The"
+source._name+"
hit"
+target._name+"
."
ball.addListener(myListener);
//创建监听员并注册给ball
ball.watch(wall);
//让ball监视wall
*MD532位码的Flash算法
//-----------
functionmd5(s){
returnbinl2hex(core_md5(str2binl(s),s.length*strsize));
functioncore_md5(x,len){
x[len>
>
5]=(x[len>
5])|(128<
<
len%32);
x[(((len+64)>
9)<
4)+14]=len;
vara=1732584193;
varb=-271733879;
varc=-1732584194;
vard=271733878;
vari=0;
while(ivarolda=a;
varoldb=b;
varoldc=c;
varoldd=d;
a=md5_ff(a,b,c,d,x[i+0],7,-680876936);
d=md5_ff(d,a,b,c,x[i+1],12,-389564586);
c=md5_ff(c,d,a,b,x[i+2],17,606105819);
b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);
a=md5_ff(a,b,c,d,x[i+4],7,-176418897);
d=md5_ff(d,a,b,c,x[i+5],12,1200080426);
c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);
b=md5_ff(b,c,d,a,x[i+7],22,-45705983);
a=md5_ff(a,b,c,d,x[i+8],7,1770035416);
d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);
c=md5_ff(c,d,a,b,x[i+10],17,-42063);
b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);
a=md5_ff(a,b,c,d,x[i+12],7,1804603682);
d=md5_ff(d,a,b,c,x[i+13],12,-40341101);
c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);
b=md5_ff(b,c,d,a,x[i+15],22,1236535329);
a=md5_gg(a,b,c,d,x[i+1],5,-165796510);
d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);
c=md5_gg(c,d,a,b,x[i+11],14,643717713);
b=md5_gg(b,c,d,a,x[i+0],20,-373897302);
a=md5_gg(a,b,c,d,x[i+5],5,-701558691);
d=md5_gg(d,a,b,c,x[i+10],9,38016083);
c=md5_gg(c,d,a,b,x[i+15],14,-660478335);
b=md5_gg(b,c,d,a,x[i+4],20,-405537848);
a=md5_gg(a,b,c,d,x[i+9],5,568446438);
d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);
c=md5_gg(c,d,a,b,x[i+3],14,-187363961);
b=md5_gg(b,c,d,a,x[i+8],20,1163531501);
a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);
d=md5_gg(d,a,b,c,x[i+2],9,-51403784);
c=md5_gg(c,d,a,b,x[i+7],14,1735328473);
b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);
a=m