在窗口上可见的外部影片剪辑仅调整大小

时间:2011-03-23 00:49:39

标签: flash actionscript-3 resize loader movieclip

我正在SWF中加载外部影片剪辑。阶段比例模式是“无比例”,阶段对齐是TOP LEFT。我正在使用OnResize事件中的以下内容将移动剪辑的大小调整为父级影片剪辑的实际高度和宽度:

object.x = stage.x;
object.y = stage.y;
object.width = stage.stageWidth;
object.height = stage.stageHeight;

但它不起作用。两个要点:

  1. 使用早于10的Flash Player时,它的工作时间较早。
  2. 现在,它仅在我调整窗口大小时才有效。我只是无法理解为什么会造成这个问题。
  3. 任何形式的任何帮助都会受到高度赞赏,因为我被阻止了。我不想使用舞台的精确适合比例模式。

    谢谢!

2 个答案:

答案 0 :(得分:1)

请记住,object.height和object.width是指对象上的活动内容,具体取决于您导入它的方式:

    import flash.net.URLRequest;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.display.MovieClip;

    function startLoad()
    {
    var mLoader:Loader = new Loader();
    var mRequest:URLRequest = new URLRequest("test.swf");
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
    mLoader.load(mRequest);
    }

    function onCompleteHandler(loadEvent:Event)
    {
            var object:MovieClip = loadEvent.currentTarget.content;
            object.x = stage.x;
            object.y = stage.y;
            trace(object.width);
            trace(stage.stageWidth);
            object.width = stage.stageWidth;
            trace(object.height);
            trace(stage.stageHeight);
            //object.height = stage.stageHeight;

            addChild(object);


}
function onProgressHandler(mProgress:ProgressEvent)
{
var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal;
trace(percent);
}
startLoad();

上面的代码可以工作,但是你可能会将宽度拉伸到内容被拉伸出场景的位置,跟踪宽度和高度。

编辑:

对于youtube,它将是这样的:

var loader:Loader = new Loader(); - global variable

function initialzer(){
       loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
       loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
}

private function onLoadInit(event:Event){
    addChild(loader);
    loader.content.addEventListener("onReady", onPlayerReady);
    loader.content.addEventListener("onError", onPlayerError);

}

function onPlayerReady(event:Event):void {
    player = loader.content;
    player.width = 111;
    player.height = 111;
}

答案 1 :(得分:0)

您可能在将对象添加到舞台之前应用了转换,因此舞台引用为null,或者其属性为null。您应该将事件侦听器添加到对象Event.ADDED_TO_STAGE中,然后在事件的回调中应用您的转换。此外,您不需要通过object.stage访问舞台对象,舞台应该是一个静态实体,您可以从对象内部或外部调用它。如果您无法通过在应用此转换的范围内键入“stage”来访问该阶段,那么这可能是问题的原因。就像我说的那样,尝试使用ADDED_TO_STAGE事件,在该回调中应用转换,如果我是对的,一切都应该没问题。此外,当您尝试投射上面发布的对象时,请使用“as”关键字。例如:

var object:MovieClip = loadEvent.currentTarget.content as MovieClip;

你声明youtube播放器“不支持这种方法”并没有真正意义,因为这与youtube或任何其他外部API无关。转换/类型转换是一种编程语言功能。唯一的情况是这个陈述是真的,如果youtube播放器与MovieClip对象没有共同的内容,在这种情况下你会在运行时得到一个类型强制错误(在某些情况下甚至可能是编译时),告诉你你只是不能将对象转换为完全不同的对象。无论如何希望这有帮助。