在我的Flash文件中,我有一个轮子。用户可以通过使用箭头跳转到下一个“段”来旋转车轮(想想相互连接的20个图像,形成车轮的圆周)。
单击箭头会启动此代码:
protected function rotate():void
{
var rotateTo:Number = (-360 / numItems) * currentItem + 90;
TweenLite.to(planesHolder, 1, { rotationY:rotateTo, ease:Quint.easeInOut } );
}
然而,我想要做的是,点击并拖动以旋转车轮,完成加速和减速,甚至在车轮减速到一定速度时稳定在最近的图像上。我不知道该怎么做:我需要检测光标的前后位置并将其转换为车轮的速度,然后随着时间的推移减速,并检测哪个图像最接近某个速度和“快速”它,都向上和向下滚动。 (它只会影响Y轴)
任何帮助将不胜感激
答案 0 :(得分:1)
当鼠标停止时,在Enter_frame中检查当前偏移到前一个位置:
private function enterFrameHandler(e:Event)
{
offset = oldy - oldMousePosition;
oldy = oldMousePosition
}
这应该给你当前的速度。 (显然,对于方向盘,它再次在enterFrame中“wheel.rotation + = offset / some_value_to_slow_it_down”)。
引入“缓和”你可以使用摩擦变量。
再次,在enterFrame事件中:
offset *= .8;
然后为了捕捉到下一张图像,请检查当前速度的速度;如果它低于某个公差,则将速度设置为0并将其缓和到最接近的值。 (你猜对了,再次在enterFrame事件中
if(offset < 1)
{
offset = 0;
//calculate the nearest value of the wheel
//tweenlite right over there
}