当使用TweenLite在拖动过程中使用TweenLite补间过滤器时,我收到了非常显着的性能提升。ActionScript - 使用TweenLite和鼠标移动事件的严重性能问题
private function mouseMoveEventHandler(evt:MouseEvent):void
{
evt.stopImmediatePropagation();
startDrag();
zoomTween = new TweenLite(this, 1.0, {dropShadowAmount: ZOOM_SHADOW, scaleX: 1.5, scaleY: 1.5, rotation: 10, onUpdate: updateDropShadow, onComplete: completeDropShadow, onCompleteParams: [ZOOM_SHADOW]});
removeEventListener(MouseEvent.CLICK, mouseClickEventHandler);
addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
addEventListener(MouseEvent.MOUSE_OUT, mouseUpEventHandler);
}
private function updateDropShadow():void
{
filters = [new DropShadowFilter(dropShadowAmount, 90, 0x000000, 1.0, dropShadowAmount * 2, dropShadowAmount * 2, 1.0, 3)];
}
private function completeDropShadow(dropShadowAmount:Number):void
{
this.dropShadowAmount = dropShadowAmount;
}
我知道有一个阴影Plusing与TweenLite的,但只需要补间上落过滤器,而不是改变总是可见投影的距离或模糊量的能力。
另外,我没有在手机上测试这个,我在我的快速桌面上测试了Flash CS5和外部调试器 - 两者都比显示对象滞后,这只是一个简单的方形,甚至zoomTween完成后。
有什么想法?
好吧,我明白要调用所有那些TweenLite实例 - 不知道为什么我没有看到。但不是像输入框架事件一样征税的鼠标移动事件? – TheDarkIn1978 2011-03-04 22:13:58
不,他们更糟。您可以在单个帧的空间中发生多个mouse_move事件。典型的是十几个。还要考虑到MouseEvent的所有泡泡,所以这些数十个事件都在冒泡通过显示列表。停止传播可以提供帮助,但大多数情况下只有在捕获阶段而不是气泡阶段时才会有所帮助。作为一个实验,在swf根上设置mouseEnabled = mouseChildren = false,然后尝试用无鼠标事件处理程序在复杂的swf上滑动手指。现在启用鼠标事件并再次尝试。现在使用处理程序。 – scriptocalypse 2011-03-04 22:37:28
这是为了说明,即使您不听或使用鼠标事件做任何事情,他们仍然对Flash Player征税。添加处理程序会使情况更糟。 – scriptocalypse 2011-03-04 22:38:51