代码之家  ›  专栏  ›  技术社区  ›  Dan Hanly

AS3中的加速和减速

  •  0
  • Dan Hanly  · 技术社区  · 14 年前

    在我的Flash文件里我有一个轮子。用户可以通过使用箭头跳到下一个“段”来旋转轮子(想象20个相互连接的图像形成轮子的圆周)。 Wheel

    protected function rotate():void
            {
                var rotateTo:Number = (-360 / numItems) * currentItem + 90;
                TweenLite.to(planesHolder, 1, { rotationY:rotateTo, ease:Quint.easeInOut } );
            }
    

    不过,我想做的是,点击并拖动来旋转车轮,完成加速和减速,甚至在车轮减速到一定速度时,在最近的图像上定位。我不知道该怎么做:我需要检测光标的前后位置,并将其转换为车轮的速度,然后随着时间的推移而减速,还需要检测哪个图像在某个速度下最接近,并“捕捉”它,上下滚动。(它只会影响Y轴)

    任何帮助都将不胜感激

    1 回复  |  直到 14 年前
        1
  •  1
  •   Art    14 年前

    当鼠标向下时,在输入框中检查当前到上一位置的偏移:

    private function enterFrameHandler(e:Event)
    {
      offset = oldy - oldMousePosition;
      oldy = oldMousePosition
    }
    

    这会给你当前的速度。(或者,对于轮子来说,它又是一个enterFrame中的“wheel.rotation+=offset/some_value_to_slow_it_down”)。

    要引入“缓和”,可以使用摩擦变量。

    offset *= .8;
    

    然后为了捕捉到下一个图像,检查当前速度有多快;如果低于某个公差,请将速度设置为0并将其放宽到最接近的值。(你猜对了,在一个enterFrame事件中

    if(offset < 1)
    {
      offset = 0;
      //calculate the nearest value of the wheel
      //tweenlite right over there
    }