Загрузка внешнего SWF - размеры не верны
У меня есть основной файл SWF. Он имеет простой пустой мувиклип с именем экземпляра mc_external_swf.
Теперь я использую класс документа для загрузки внешнего SWF-файла. Внешний файл загружается и виден, но его размеры не умещаются внутри константы movieclip, некоторые элементы из внешнего swf-файла перекрываются вне контейнера movieclip. Посмотрите на изображение ниже.
Вот код, используемый для загрузки внешнего SWF-файла.
var _swfLoader:Loader;
var _swfContent:MovieClip;
function goToPlay(e:MouseEvent=null):void
{
loadSWF("agameFLA.swf");
}
public function loadSWF(path:String):void
{
var _req:URLRequest = new URLRequest();
_req.url = path;
_swfLoader = new Loader();
setupListeners(_swfLoader.contentLoaderInfo);
_swfLoader.load(_req);
}
function setupListeners(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.COMPLETE, addSWF);
}
function addSWF(event:Event):void
{
event.target.removeEventListener(Event.COMPLETE, addSWF);
event.target.removeEventListener(ProgressEvent.PROGRESS, preloadSWF);
_swfContent = event.target.content;
mc_external_swf.addChild(_swfContent);
}
Вот код самого внешнего файла - (его класса документа)
package
{
import away3d.cameras.Camera3D;
import away3d.cameras.lenses.PerspectiveLens;
import away3d.containers.ObjectContainer3D;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.controllers.HoverController;
import away3d.entities.Mesh;
import away3d.materials.ColorMaterial;
import away3d.primitives.CubeGeometry;
import flash.display.MovieClip;
public class Main extends MovieClip
{
public var _view : View3D;
private var _scene:Scene3D;
private var _camera : Camera3D;
private var _hoverController:HoverController;
private var _container:ObjectContainer3D;
private var _cube:CubeGeometry;
private var _cubeMaterial:ColorMaterial;
private var _cubeMesh:Mesh;
public function Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE,init);
iniScene();
iniObjects();
}
private function iniScene():void
{
_scene = new Scene3D();
_view = new View3D();
_view.backgroundColor = 0x666666;
_view.antiAlias = 4;
_camera= new Camera3D();
_camera.lens = new PerspectiveLens(60);
_hoverController = new HoverController(_camera, null, 180, 0);
_hoverController.distance = 400;
_hoverController.steps = 16;
_view.camera = _camera;
this.addChild(_view);
}
private function iniObjects():void
{
_container = new ObjectContainer3D();
_cube = new CubeGeometry(100, 100, 100, 20, 20, 20);
_cubeMaterial = new ColorMaterial(0x0000FF);
_cubeMesh = new Mesh(_cube, _cubeMaterial);
_cubeMesh.mouseEnabled = true;
_container.addChild(_cubeMesh);
_view.scene.addChild(_container);
this.addEventListener(Event.ENTER_FRAME, _onEnterFrame);
_onResize();
}
private function _onResize(e:Event=null):void
{
_view.width = stage.stageWidth;
_view.height = stage.stageHeight;
}
private function _onEnterFrame(e:Event):void
{
_view.render();
}
}
}
Это может происходить с библиотекой away3d. Я пытался загрузить другие файлы, но они хорошо вписываются. Но этот swf, в частности, не помещается в контейнер movieclip. Я думаю, что это как-то связано с view3d в away3d, но я не уверен.
1 ответ
Все учебники по Stage3D (или библиотекам, таким как Away3D), которые я видел, включали следующий код в основной класс:
public function Main()
{
//wait until stage object is ready
addEventListener(Event.ADDED_TO_STAGE, addedHandler);
}
private function addedHandler(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, addedHandler);
stage.align = "TL"; //or use StageAlign.TOP_LEFT;
stage.scaleMode = "noScale"; //or use StageScaleMode.NO_SCALE;
}
Это остановит swf от масштабирования.