在拖动时使用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;
}
据我所知,TweenLite有一个Drop Shadow Plusing,但它只能打开和关闭过滤器,而不是改变一个总是可见的投影的距离或模糊量。
另外,我不是在手机上测试这个,我在Flash CS5和外部调试器的快速桌面上测试 - 两者都落后于显示对象,这只是一个简单的方形,即使在zoomTween已完成。
任何想法?
答案 0 :(得分:1)
您将在每次mousemove更新时实例化一个新的TweenLite。您可能会在单个enter_frame间隔的空间内发生数十个。这可能是一个很多的TweenLite实例,所有这些实例都试图同时移动同一个对象一秒钟。想想数以百计的“短”鼠标运动。数以千计的延长动作。
尤其对于移动设备,您需要避免鼠标移动事件,因为它们绝对会泛滥系统。这是数据过载。也许您可以在enter_frame或计时器事件处理程序中跟踪delta随时间的变化?这样做,然后确保一次只存在一个tweenlite(杀死旧的,或者在分配新的之前让旧的完成)。
另请注意,移动设备上的过滤器非常难。您可以在桌面上启动并运行它,但如果在移动设备上运行,我会感到惊讶。