1

私は、Plastic Sturgeon(http://plasticsturgeon.com/2010/09/as3-get-visible-bounds-of-transparent-display-object/)から採用されたこの関数を使用して、表示オブジェクトの表示境界を取得しています。

public static function getVisibleBounds(source:DisplayObject):Rectangle
{
    var matrix:Matrix = source.transform.concatenatedMatrix;    
    var data:BitmapData = new BitmapData(1000, 1000,true,0x00000000);
    data.draw(source, matrix);
    var bounds:Rectangle = data.getColorBoundsRect(0xFFFFFFFF,0x000000,false);
    data.dispose();
    return bounds;
}

ただし、ステージサイズによっては、境界がオブジェクトからオフセットされます。デフォルトのステージサイズ(550px×400px)で完全に機能しますが、いずれかの寸法を大きくすると、その寸法と反対の方向に移動します(xを大きくすると、オブジェクトから左にオフセットされ、yを大きくすると、オブジェクトから下向きにオフセットされます。)これは一貫して行われません。オフセット(ステージ寸法)は非線形であり、特定の範囲のステージ寸法では0であり、その範囲より大きいステージ寸法では、ステージ寸法とともに急速に上昇します。オフセットは、ステージの寸法を何から変更したかによっても異なります。たとえば、ステージで400pxから1000pxに移動し、その間にムービーをテストした場合、境界は、400pxから1000pxに一度に移動した場合とは異なる方法でオフセットされます。または中間段階で映画をテストせずに。オフセットが1つの次元でのみ変化し、他の次元は何もしない場合があります。また、公開されたファイルはテストとは異なります。関数を外部ファイルではなく、表示オブジェクトと同じファイルに入れてみましたが、それでも信頼性がありません。ステージのサイズやその他すべてに関係なく、表示オブジェクトの実際の表示境界を確実に取得できる修正があるのではないかと思います。

私のコンピューターはWindowsVistaHome Premium 32ビットを実行しており、Adobe FlashProfessionalCS5.5を使用しています。

4

1 に答える 1

1

これは、いくつかのステージプロパティを設定することで解決できる問題である可能性があります。まず、スケールを調整しないようにステージを設定してみてください。

this.stage.scaleMode = "noScale";

次に、いくつかの配置ルールを設定します。

this.stage.align = "TL";

それが役立つ場合は、ビットマップのコピーでスケーリングのバグに関する問題が発生している可能性があります。

于 2012-08-24T03:49:40.397 に答える