Загрузка внешнего 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 от масштабирования.

Другие вопросы по тегам