前言:最近韩国菜单在国际出尽风头,尤其是他们的缓冲菜单,效果的确一流.小弟破解出一条纯as编写的菜单的一条关键公式,并尝试应用到实际并成功,不敢独享,拿出来让大家pp!
原菜单
[全屏欣赏]
原菜单代码:
var drag=0.1;//震动参数
var flex=0.7;//震动参数
var menuEN=new Array("News","Movie","Music","Game","Net TV","BBS","Member");
var menuZH=new Array("新闻频道","电影频道","音乐频道","游戏频道","网络电视","网友论坛","会员专区");
var menuURL=new Array("#","#","#","#","#","#","#");
var menuColor=new Array(0xD808B8,0x00A2FF,0x96D302,0xFFC600,0xFF5400,0x7908D8,0x02D396);
var mBlock=this.attachMovie("mblock","mb",0);
mBlock._y=5;
mBlock.goalX=-100;
mBlock.onEnterFrame=function(){
this.Step = this.Step * flex + (this.goalX - this.px) * drag;
this.px+=this.Step;
this._x=this.px;
if(this.sOut && this._xscale<99.5) this._xscale+=(100-this._xscale)/8;
if(this.sIn && this._xscale>0.1) this._xscale+=-this._xscale/8;
}
var MBColor=new Color(mBlock);
for(var i=0;i<menuZH.length;i++){
var theItem=this.attachMovie("MenuItem","Item"+i,i+10);
theItem._x=i*84;
theItem.mColor=menuColor[i];
theItem.URL=menuURL[i];
theItem.mc_ZH.itext.text=menuZH[i];
theItem.mc_EN.itext.text=menuEN[i];
theItem.onEnterFrame=function(){
if(this.fadeOut){
if(this.topLine._alpha<99.5) this.topLine._alpha+=(100-this.topLine._alpha)/8;
if(this.mc_EN._alpha>0.5) this.mc_EN._alpha+=-this.mc_EN._alpha/8;
if(this.mc_ZH._xscale<130) {this.mc_ZH._xscale+=2;this.mc_ZH._yscale+=2;}
}
if(this.fadeIn){
if(this.mc_EN._alpha<99.5) this.mc_EN._alpha+=(100-this.mc_EN._alpha)/8;
if(this.topLine._alpha>0.5) this.topLine._alpha+=-this.topLine._alpha/8;
if(this.mc_ZH._xscale>100) {this.mc_ZH._xscale-=2;this.mc_ZH._yscale-=2;}
}
}
theItem.onRollOver=function(){
mBlock.goalX=this._x+42;
mBlock.sOut=true;
mBlock.sIn=false;
MBColor.setRGB(this.mColor);
new Color(this.topLine).setRGB(this.mColor);
//new Color(this.mc_ZH).setRGB(0xFFFFFF);
this.fadeOut=true;
this.fadeIn=false;
}
theItem.onRollOut=function(){
mBlock.sOut=false;
mBlock.sIn=true;
//new Color(this.mc_ZH).setRGB(0x000000);
this.fadeIn=true;
this.fadeOut=false;
}
theItem.onRelease=function(){
getURL(this.URL);
}
}
stop();
我仿做的菜单:
[全屏欣赏]
源文件:
点击浏览该文件
我们开始吧,首先做一个按钮,拖4到场景,名字分别n=key1,n=key2,n=key3,n=key4!
在按钮key上添加代码如下:
on(rollOver){attachMovie("mc","mc",1);//鼠标经过,调用库中名为mc的剪辑,重新改名为mc,深度为1
attachMovie("on_key","on_key01",2);//同上,代入名字而已^_^
attachMovie("on_key","on_key02",3);//同上深度变化了
removeMovieClip(_root.on_key11);//删除场景里名为on_key11的mc(目的,当其他按钮代入这个mc的时候,在我鼠标经过目标mc时删除它,避免混乱)
removeMovieClip(_root.on_key12);//同上
removeMovieClip(_root.on_key21);
removeMovieClip(_root.on_key22);
removeMovieClip(_root.on_key31);
removeMovieClip(_root.on_key32);
on_key01._y=250;//设置刚才调入的子菜单y坐标
on_key01._x=_root.key._x+60;//设置坐标,同上
on_key02._y=222;
on_key02._x=_root.key._x+60;
_root.key_mc1.gotoAndPlay(2);}//场景里的名为key_mc1的mc往第2侦运动!(效果而已)
on(rollOut){_root.key_mc1.gotoAndPlay(13);}//当鼠标移出按钮反应区,执行动作:场景里的名为key_mc1的剪辑向13侦播放!
第2个按钮写入同样格式代码,只是调整mc的坐标,这里省略,详细见源文件!
做一个mc,画一个正方形,再做一个mc,调入刚才的mc,并命名为mc,在侦上粘贴如下代码:
var i = _root.key._x+84;//设置一个变量i,让它的数值为场景中名叫key的按钮的x坐标+84!
onEnterFrame = function(){mc._x=(i-mc._x)*0.8}//公式
这条就是最简单的数学缓冲公式,我解释一下:
mc的x坐标取值为i-mc的x坐标*0.8,0.8是速度!
我们代入数字算一算,如果mc的x坐标=100,那么1为一个固定值比如120,就有mc现在的x坐标为
(120-100)*0.8=16,循环一下,mc现在的坐标就是16了,代入,有(120-16)*0.8=91.2..............
由于mc的坐标呈几何递增(减),所以mc的速度就会呈缓冲状态变化!
继续!像昨天的教程一样,我们为这个mc添加链接名为mc,so that我们能使用attachMovie函数调用这个mc,完成这个mc之后,我们做一个按钮,随便做,再做一个mc装载这个按钮,命名这个按钮为mc,思路跟刚才做的mc一样!同样方法粘贴代码:
var i = _root.key._y+200;
onEnterFrame = function(){mc._y=(mc._y-i)*.5}
这里我请大家动动脑筋,解释一下上面的代码!呵呵!毕竟学习还是需要大家动脑筋的!
做一个mc,文字mc,效果为文件中"hi,flash"那样,这个不用我教了吧?^_^,做一个30侦的循环,在第1和第15侦写上stop();配合按钮上的代码:
_root.key_mc1.gotoAndPlay(2);}//场景里的名为key_mc1的mc往第2侦运动!(效果而已)
on(rollOut){_root.key_mc1.gotoAndPlay(13);}//场景里的名为key_mc1的mc往第2侦运动!(效果而已)
拖到场景,命名为key_mc1
大功告成!刚才所说的精华全在一条缓冲数学公式,活用之后,韩国所有菜单你都能应付自如^_^,到时不要忘记跟小弟我交流交流哦!咔咔!
教程肤浅,错漏难免,欢迎提问,不过请先思考!谢谢!