打印

[基础] 这样的效果如何实现


我有这么一个MC
这个mc是2步的,变长,变短,中间用了stop();

以下是我要实现的效果


如图1,场景有5个Mc,其中中间那个mc是变化过的
当我按下方向键右的时候,首先Mc3变短,然后整体移动,因为 MC5移动到场景外,所以从左边进入(当然真正的不止5个),然后位于中间的MC2变长- -
就是这么一个效果 - -



希望能有些效果差不多的源文件- -参考一下
在闪吧里求助了- -讨厌版主给了我一个例子很像- -就是没源文件-。-
所以过来问问看了
我也只能给你例子,要源文件请自己根据思路做嘛。
关键还是要自己动手的。
http://space.flash8.net/bbs/thread-360291-1-1.html
恩- -我看到了- -
不过对AS还不太熟悉- -所以希望有个参考- -
你这个好象是以前的一个导航的例子
橙色下午茶

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
昨天写了一下就是里面的没算出来关于那个函数你自己优化下.
复制内容到剪贴板
代码:
var arrmc:Array=[mc0,mc1,mc2,mc3,mc4];
//权重比例
var key:Array=[1.4,1,0.8,0.7,0.6];
var thismc:MovieClip=this;
var small:Number=100;//默认的宽度
for(var i:Number=0;i<arrmc.length;i++){
    var tmpmc:MovieClip=arrmc[i];
    tmpmc.id=i;
    //记录初始位置
    tmpmc.basex=tmpmc._x;
    tmpmc.onRollOver=function(){
        thismc.rolloverHandle(this.id);
    }
    tmpmc.onRollOut=function(){
        thismc.rolloutHandle(this.id);
    }
}
//RollOverHandle
function rolloverHandle(id:Number):Void{
    //从中间向2边开始扩散
    for(var i:Number=0;i<arrmc.length;i++){
        var tmpmc:MovieClip=arrmc[i];
        var dis:Number=i-id;
        Jmove(tmpmc,small*key[Math.abs(dis)],getDis(i,dis));
    }
}
function getDis(id:Number,n:Number):Number{
    var tar:Number=0;
    n>=0?tar=1:tar=-1;
    trace(arrmc[id].basex);
    return arrmc[id].basex+tar*Count(Math.abs(n));
}
function Count(n:Number):Number{
    var s:Number=0;
    if(n==0){
        s=0;
    }else if(n==1){
        s=0.2;
    }else if(n==2){
        s=0.1;
    }else if(n==3){
        s=-0.15;
    }else if(n==4){
        s=-0.5    
    }
    return s*(small);
}
//RollOutHandle
function rolloutHandle(id:Number):Void{
    for(var i:Number=0;i<arrmc.length;i++){
        Jmove(arrmc[i],100,arrmc[i].basex);
    }
}
//公用函数
function Jmove(mc:MovieClip,towidth:Number,tox:Number):Void{
    delete mc.onEnterFrame;
    var tmpmc:MovieClip=this;
    var basewidth:Number=mc._width;
    var tmpdes:Number=towidth-basewidth;
    if(tox==undefined || tox==NaN){
        tox=mc._x;
    }
    var tmpdesx:Number=tox-mc._x;
    mc.onEnterFrame=function(){
        tmpdes/=2;
        tmpdesx/=2;
        this._width=towidth-tmpdes;
        this._x=tox-tmpdesx;
        if(Math.abs(tmpdes)<0.5 && Math.abs(tmpdesx)<0.5){
            this._width=towidth;
            this._x=tox;
            delete this.onEnterFrame;
        }
    }
}
这个例子Count函数你自己优化下.自己没算出来怎么算的
橙色下午茶

TOP

在舞台上放4个小方块 命名在arrmc里 每个宽度暂时设置为100就可以了,然后把这段代码放到第一侦就可以了
橙色下午茶

TOP