• 2009-03-21
  • AS2动效-弹簧_AS2
  • 转载请保留本行链接:http://www.www.luoye.org/html/ 转载许可:署名-非商业性使用-相同方式共享

    Spring弹簧

    spring非常类似于easing,但它的效果比easing更cool。一般的方法为定义一个目标点,计算出到它的距离,加速度为距离与摩擦系数的积,同时还需要使用摩擦。

    代码:
    var targetx = 200;
    var targety = 150;
    fraction = .9;
    vx = 0;
    vy = 0;
    onEnterFrame = function () {
     if (!dragging) {
            //起始点与目标地点的距离
      dx = targetx-my_mc._x;
      dy = targety-my_mc._y;
           //加速度
      vx += dx*.3;
      vy += dy*.3;
           //加入摩擦
      vx *= fraction;
      vy *= fraction;
      my_mc._x += vx;
      my_mc._y += vy;
     }
    };
    my_mc.onPress = function() {
     this.startDrag();
     dragging = true;
    };
    my_mc.onRelease=function() {
     this.stopDrag();
     dragging = false;
    };

    spring 与鼠标相连

    下面我们要对spring 进行一下简单的扩展,我们可以将目标地点设为光标的坐标值,同时可以使用drawing api用画线的方式将其相连起来。

    代码:
    var targetx = 200;
    var targety = 150;
    fraction = .9;
    vx = 0;
    vy = 0;
    onEnterFrame = function () {
     dx = _xmouse-my_mc._x;
     dy = _ymouse-my_mc._y;
     vx += dx*.3;
     vy += dy*.3;
     vx *= fraction;
     vy *= fraction;
     my_mc._x += vx;
     my_mc._y += vy;
        //画线与mouse相连
     clear();
     lineStyle(1,0,100);
     moveTo(_xmouse,_ymouse);
     lineTo(my_mc._x,my_mc._y);
    };

    Spring 链

    最后我们来一个稍微难一点的,是上面例子的一个扩展,如果你对上一个例子有了一定的理解,这个对你来说是不成问题的。上面的例子是跟随着光标,如果是链的话。那么第二个小球就应跟随第一个小球,依次类推。如果这个你难做出来。相信这种类型的菜单对你来说就不成问题了。

    代码:
    fraction = .7;
    grav=20;
    my_mc.vx = 0;
    my_mc.vy = 0;
    my_mc1.vx = 0;
    my_mc1.vy = 0;
    my_mc2.vx = 0;
    my_mc2.vy = 0;
    onEnterFrame = function () {
     clear();
     lineStyle(1, 0, 100);
     moveTo(_xmouse, _ymouse);
     spring(my_mc, _xmouse, _ymouse);
     spring(my_mc1, my_mc._x, my_mc._y);
     spring(my_mc2, my_mc1._x, my_mc1._y);
    };
    function spring(mc, x, y) {
     dx = x-mc._x;
     dy = y-mc._y;
     mc.vx += dx*.3;
     mc.vy += dy*.3;
     mc.vy += grav;
     mc.vx *= fraction;
     mc.vy *= fraction;
     mc._x += mc.vx;
     mc._y += mc.vy;
     lineTo(mc._x, mc._y);
    }
  • x
Powered by LuoYe Lab , Skin in Kaven,XiaoXu RSS Copyright © 2008