0

約 6 つの大きな高解像度画像 (それぞれ約 7000x7000) のグループがあり、それらを Adob​​e AIR iPad アプリにロードし、TransformGestureEvent を使用してズームとパンを有効にしようとしています。PC のデバッグ プレーヤーでは正常に動作しますが、デバイスに到達すると頻繁にクラッシュします。私はそれを最適化するために多くのことを試しました:

  • Greensock BlitMaskの使用(少し役に立ちました)
  • ロード後、各オブジェクトをベクターに格納して、既にロードされている場合は別のローダーを使用する必要がないようにします。
  • 可能な限りローダー オブジェクトを再利用し、インスタンス化を回避します。

画像を圧縮して半分にすることも考えましたが、できれば避けたいです。

ありがとう。

(コードを投稿していないことをお詫びします。それは私のオフィスのコンピューターにあります)

4

1 に答える 1

0

お使いのコンピューターで正常に動作する理由は、コンピューターが電話よりも多くの RAM を搭載しているためです。1 つのアプリケーションで使用されるメモリが多すぎると、電話機がクラッシュします。これを修正するには、次の方法で画像を小さいサイズに保つことができます。

[1] ボックスを作成し、それを MovieClip に変換して、 のような名前を付けますBox

[2] コードで、新しい形状を作成します ( var shape:Shape = new Shape();)

[3] ライブラリで、actionscript のビットマップをエクスポートし、「HighRes」などの名前を付けます。

[4] このコードを GestureEvent に入れます (Box.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom));ここで、新しい HighRes インスタンスを作成し、ズームすると大きくなったり小さくなったりする図形のグラフィックスを塗りつぶします。

var reshigh = new HighRes(); 
shape.graphics.width *= e.scaleX;
shape.graphics.height *= e.scaleY;
shape.graphics.beginBitmapFill((HighRes as Bitmap).bitmapData);
shape.graphics.lineTo(Box.width * 3, 0);
shape.graphics.lineTo(Box.width * 3, Box.height * 3);
shape.graphics.lineTo(0, Box.height * 3);
shape.graphics.lineTo(0, 0);
shape.graphics.endFill();

これはテストされていないコードであるため、調整が必要になる場合があることに注意してください。

于 2013-08-14T16:19:12.657 に答える