Невозможно замаскировать Stage3D SWF в загрузчике
Работая в FlashBuilder, я создаю мобильное приложение AS3, которое использует Loader для отображения локального SWF-файла. Он маскирует загрузчик, поэтому показывает только окно 640x480. Это работало нормально, используя старый SWF-файл (игра Flixel, не Stage3D).
Затем я попытался сделать это с помощью SWF-файла с поддержкой Stage3D. Это не удалось запустить, потому что приложение не было настроено для работы в "прямом" режиме рендеринга (до этого момента оно находилось в автоматическом режиме). Это позволило приложению работать, но SWF-файл теперь игнорирует маску загрузчика и отображается на всей стадии.
Разве невозможно замаскировать SWF-файлы Stage3D при такой загрузке? Загрузка выглядит так:
public function FlixelTest()
{
super();
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
myLoader.x = (stage.fullScreenWidth-640)/2;
myLoader.y = (stage.fullScreenHeight-480)/2;
var url:URLRequest = new URLRequest("stage3dswf.swf"); // in this case both SWFs are in the same folder
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadProdComplete);
myLoader.load(url); // load the SWF file
addChild(myLoader);
}
private function loadProdComplete(e:Event):void{
var gameMask : Shape = new Shape;
gameMask.graphics.beginFill(0xffcc00);
gameMask.graphics.drawRect(myLoader.x,myLoader.y,640,480);
gameMask.graphics.endFill();
myLoader.content.mask = gameMask;
}
1 ответ
Как вы можете прочитать в документации Adobe по Stage3D, специальные слои Stage3D расположены "позади" обычной сцены, используемой для 2D-контента.
Поскольку любая маска, применяемая на 2D-этапе, существует в другом списке отображения, невозможно использовать 2D-маски для содержимого Stage3D. Если это вообще возможно, единственный способ получить аналогичные результаты - это использовать 3D-слои и альфа-маски в контексте Stage3D.