0

ビュースタックのように機能するコンポーネントを作成しましたが、次のインデックスコンポーネントは4つの側面のいずれかからスライドインします。十分に機能しているので、使用しても問題ありませんが、より効率的にしたいと思います。

現在、ベースコンポーネントとしてCanvasを使用しており、ImageSnapshot(new Bitmap( ImageSnapshot.captureBitmapData( this ) ))を使用して現在のビューのスナップショットを作成し、インデックスの変更時にその画像の上に新しいインデックスをスライドさせます。

私は基本的にこれをより良い方法で行う方法についての提案を探しています。コンポーネントがロードされた後、スライドが発生した後に画像を撮影することで、最初の翡翠の動きを最小限に抑えましたが、通常はこれをグリッドの遷移に使用するため、最初または最初の2、3枚のスライドではほとんどの場合遅くなります。

これまでのところ、その一部は次のようになっています。

private function creationComplete(e:Event):void
{
  tmpImage.source = new Bitmap( ImageSnapshot.captureBitmapData( this ) );
}

public function set selectedIndex(value:int):void
{
  if(_selectedIndex == value + 1)
    return;
  _selectedIndex = value+1;

  var obj:UIComponent;

  tmpImage.height = height;
  tmpImage.width = width;
  tmpImage.visible = true;
  tmpImage.x = 0;
  //tmpImage.includeInLayout = true;

  for (var i:int = 1; i < numChildren; i++)
  {
    obj = UIComponent(getChildAt(i));
    //obj.x = width;
    if(i == _selectedIndex){
      obj.visible = true;
      objDisplay = obj;
    }
    else
      obj.visible = false;
  }

  mv1.target = tmpImage;
  mv2.target = objDisplay;

  switch ( direction )
  {
    // X/Y sliding logic
  }
  parEfect.play();

  tmpImage.source = new Bitmap( ImageSnapshot.captureBitmapData( this ) );
}

ご参考までに、画像にはキャンバスのインデックス0を使用しており、カスタムのselectedIndexを1オフセットしています。

必要に応じてもっと投稿しますが、質問を最小限に抑えたいので、これでほぼ要約できます。

どんな助けでも大歓迎です!このコンポーネントのパフォーマンスを向上させたいと思っています。また、これはFlex3を使用して実行する必要があります

4

4 に答える 4

2

mv1とmv2とは何ですか?それらはフレックスエフェクトですか?もしそうなら、それらが悪名高いほど遅いので、私はTweenLiteを使用することをお勧めします。どうしても使用する必要がある場合は、それらを設定suspendBackgroundProcessing = trueしてください。最後になりましたが、レイアウトが設定されていないことを確認してください。これを行うと、フレームごとに再レイアウトが発生し、アニメーションが簡単に停止する可能性があります。

于 2010-11-26T17:17:52.913 に答える
1

作成されたすべてのコンポーネントからメモリヒットが発生し、すぐにイメージに変換されている可能性があります。作成時にインテリジェンスを追加してみます。イメージを作成する前に、メモリ使用量を確認し、最大メモリ負荷に対してテストしてみてください。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/System.html

ただし、オブジェクトで何が作成されているかを確認する必要があります。各ビューにかなり重いオブジェクトをロードしていると思われます。また、オブジェクトごとにサーバーからデータをロードする場合は、遅延が発生する可能性があります。

作成中のクラス内にオブジェクトを作成するための優先キューを設定します。。。たとえば、デフォルトで非表示になっているメニューシステムがある場合は、フロントエンドをロードし、ユーザーがクリックしたとき、または他のすべてのすぐに表示されるオブジェクトが作成された後にのみ、メニュードロップダウンをロードします。また、すぐに表示されるすべてのオブジェクトが配置されているとき、および非表示のオブジェクトが作成される前に、スナップショットを作成できるという利点もあります。

最後に、可能であれば、オブジェクトの作成後にイベントリスナーを追加し、リスナーをできるだけ早く削除することを忘れないでください。

于 2010-11-22T19:47:55.363 に答える
0

Flex3またはFlex4を使用していますか?

Flex 4を使用している場合は、シェーダーフィルターでアニメーションフィルターを使用することをお勧めします。シェーダーフィルターはPixelBenderを使用するため、2つの画像間の遷移を行うPixelBenderでシェーダーを作成できます。

詳細については、次の2つのビデオを参照してください。

http://tv.adobe.com/watch/codedependent/pixel-bender-shaders-and-flex-4/

http://tv.adobe.com/watch/codedependent/shader-transitions-in-flex-4

于 2010-11-28T11:46:01.053 に答える
0

Moveエフェクトをどのように作成しているかを確認すると便利mv1ですmv2。、、、および/または属性の組み合わせ、またはトゥイーンの速度/期間を制御するプロパティのさまざまな操作を設定*Fromして、結果のアニメーションに「ジッター」または「ジャーキネス」を引き起こす可能性があります。 *To*By

もちろん、ある種のパフォーマンスの障壁にぶつかっている可能性もありますが、それはもっと陰湿なものだと思います。クリップが回転、傾斜、または拡大縮小されていない限り、クリップの単純な移動( "x / yスライド")は比較的良好に機能するはずです。同時に実行されている他の操作でプロセッサが完全に限界に達していない限り。

ほとんどの場合、Move効果を定義するときは、できるだけ少ない情報を設定し、Flexに他のものの最適値を計算させる必要があります。通常、これはとを設定することだけxToを意味しますyTo

end()また、新しい値の設定を開始する前に、必ずトゥイーンを呼び出してください(以前のシーケンスがまだ実行されている場合に備えて)。

最後に、トゥイーン中にコンポーネントのレイアウトマネージャーと競合していないことを確認してください。トゥイーンの実行中は、(コンテナコンポーネントで設定autoLayout=falseすることにより)レイアウトを完全に無効にする必要があります。または、レイアウトを(一時的に)絶対レイアウトに変更することもできます。いずれにせよ、トゥイーンは実行中に物事を移動できるようにする必要があり、物事の移動によって、レイアウトマネージャーがすべてが終了するまで物事を再計算してはなりません。終了したら、元々持っていたレイアウトマネージャーを再度有効にすることができます。

于 2010-11-28T23:06:52.033 に答える