0

ドラッグ中に 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が完了しました。

何か案は?

4

1 に答える 1

1

mousemove の更新ごとに新しい TweenLite をインスタンス化しています。単一の enter_frame 間隔のスペース内で、これらすべてが発生する可能性があります。これは潜在的に多数の TweenLite インスタンスであり、すべてが同じオブジェクトを同時に 1 秒間移動しようとしています。「短い」マウスの動きだけで何百ものそれらを考えてください。拡張モーションの数千。

特にモバイルの場合、mousemove イベントはシステムを完全にフラッディングするため、避ける必要があります。それはデータの過負荷です。代わりに、enter_frame または timer イベント ハンドラーで時間の経過に伴うデルタの変化を追跡できますか? それを行ってから、一度に 1 つのトゥイーンライトのみが存在することを確認します (古いものを削除するか、古いものを終了させて​​から新しいものを割り当てます)。

また、フィルターはモバイル デバイスでは非常に難しくなることに注意してください。これをデスクトップで起動して実行することもできますが、モバイルでうまくいくとは驚きです.

于 2011-03-04T22:07:44.347 に答える