Loading an external swf - dimensions not correct

人走茶凉 提交于 2019-12-11 23:18:31

问题


I have a main swf file. It has a simple empty movieclip with instance name mc_external_swf.

Now I use the document class to load an external swf file. The external file loads and is visible, but its dimensions are not fitting inside the movieclip conatiner, some of the stuff from the external swf is overlapping outside of the movieclip container. Look in the image below.

Here is the code used to load the external swf file.

    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);
    }

Here is the code of the External File itself - (Of its Document Class)

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();
    }
}

}

It might be happening to the away3d library. I have tried to load other swfs but they fit in well. But this swf in particular does not fit in the movieclip container. I think it has got something to do with view3d in away3d but I am not sure.


回答1:


All the tutorials on Stage3D (or libraries such as Away3D) that i have seen have included the following code in the main class:

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;
}

It will stop the swf from scaling.



来源:https://stackoverflow.com/questions/14988407/loading-an-external-swf-dimensions-not-correct

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!