マスクされた SWF の境界を決定するには、 を使用しますBitmapData
。
たとえば、100x100 から始まる 200x200 にマスクされた 400x400 の swf を作成しました (ダウンロード)
この SWF をロードすると、幅 / 高さとして 400x400 がレポートされます。
マスクされていないコンテンツの可視境界を取得するには、次を実装できます。
package
{
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.net.URLRequest;
[SWF(width = 400, height = 400, backgroundColor = 0xefefef, frameRate = 60)]
public class X extends Sprite
{
private var loader:Loader;
public function X()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
loader = new Loader();
var url:URLRequest = new URLRequest("http://jasonsturges.com/labs/stack-overflow/examples/swf-mask/masked.swf");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(url);
}
protected function completeHandler(event:Event):void
{
var bitmapData:BitmapData = new BitmapData(loader.width, loader.height, true, 0);
bitmapData.draw(loader);
var bounds:Rectangle = bitmapData.getColorBoundsRect(0xff000000, 0xff000000, true);
trace(bounds);
}
}
}
どのレポート:
(x=100、y=100、w=200、h=200)
したがって、表示されるコンテンツは 100x100 から始まる 200x200 です。
ステージのサイジングごとに、ステージ上の空白/空の領域を回避するための制約を決定する必要があります。
これは、比率変数を使用して実装できます。
var ratio:Number = 1.0;
比例スケーリング (幅による):
var ratio:Number = stage.stageWidth / bounds.width;
loader.scaleX = ratio;
loader.scaleY = ratio;
loader.x = -(bounds.x * ratio);
loader.y = -(bounds.y * ratio);
ステージに合わせて表示オブジェクトを引き伸ばす:
ader.scaleX = stage.stageWidth / bounds.width;
loader.scaleY = stage.stageHeight / bounds.height;
loader.x = -(bounds.x * (stage.stageWidth / bounds.width));
loader.y = -(bounds.y * (stage.stageHeight / bounds.height));
したがって、ロードされたコンテンツを合わせて、マスク オフセットを考慮してステージ全体を埋めるように引き延ばします。
package
{
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.net.URLRequest;
[SWF(percentWidth = 100, percentHeight = 100, backgroundColor = 0xefefef, frameRate = 60)]
public class X extends Sprite
{
private var loader:Loader;
public function X()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
loader = new Loader();
var url:URLRequest = new URLRequest("http://jasonsturges.com/labs/stack-overflow/examples/swf-mask/masked.swf");
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(url);
}
protected function completeHandler(event:Event):void
{
var bitmapData:BitmapData = new BitmapData(loader.width, loader.height, true, 0);
bitmapData.draw(loader);
var bounds:Rectangle = bitmapData.getColorBoundsRect(0xff000000, 0xff000000, true);
trace(bounds);
addChild(loader);
loader.scaleX = stage.stageWidth / bounds.width;
loader.scaleY = stage.stageHeight / bounds.height;
loader.x = -(bounds.x * (stage.stageWidth / bounds.width));
loader.y = -(bounds.y * (stage.stageHeight / bounds.height));
}
}
}