0

私は、アドビや他の多くの例に似た標準のdisplacementMapfilterを使用して拡大鏡クラスを作成しています:

フィルターはアプリケーション レベルで使用されているため、すべてがフィルター処理されます。画面上でドラッグ、回転、拡大縮小できる画像要素が多数あり、このフィルターの下に渡されると、それらが拡大されます。また、フィルターをドラッグできるようにする機能をいくつか追加する予定です。

フィルターは意図したとおりに機能し、通過するすべてのものを拡大します。奇妙なことに、画像が画面の上端または左端の外にドラッグされると、フィルターはその方向に、画像が完全に画面外になるまでの距離だけ浮動します (つまり、画像が 500 ピクセルの場合、フィルターは 500 ピクセル左に浮動します)。ピクセル幅が左に画面外に引き出されます。)

enterFrame リスナーを使用してその位置を常に更新しています。次のように機能します。

private function onEnterFrame(e:Event):void {

    dPoint.x = stage.stageWidth - radius;
    dPoint.y = stage.stageHeight - radius;

    dFilter = new DisplacementMapFilter(map, dPoint, BitmapDataChannel.RED, BitmapDataChannel.BLUE, 100, 100, DisplacementMapFilterMode.IGNORE, 0x000000, 0);

    // The application is a displayObject itself, so just apply filters to "this"
    this.filters = [dFilter];
}

したがって、このコードはフィルターを画面の右下に固定する必要がありますが、何らかの理由で画像がドラッグされるたびに、フィルターがドリフトします。フィルターがそれを行う理由はありますか?また、それを止める方法はありますか?

4

1 に答える 1

0

画像をステージの外にドラッグすると、フィルターが適用されている四角形のサイズと形が変わります (ステージ上のすべてのスナップショットを撮っているようなフィルターを想像してください)。画像が左上からずれると、フィルターの (0, 0) が実際には画像の左上隅にあることを意味します。

ステージの境界 (ステージ自体の座標空間内) を確認すると、画像をドラッグするtopleft負の数値が表示されます。

stage.getBounds(stage).top;
stage.getBounds(stage).left;

負の境界をキャンセルすると、フィルターが正しい位置に保持されます。

var stageBounds:Rectangle = stage.getBounds(stage);
if (stageBounds.left < 0) {
    dPoint.x -= stageBounds.left;
}
if (stageBounds.top < 0) {
    dPoint.y -= stageBounds.top;
}
于 2013-05-20T22:54:50.540 に答える