Внешний мувиклип виден только при изменении размера окна - PullRequest
0 голосов
/ 23 марта 2011

Я загружаю внешний клип в свой SWF. Режим масштабирования сцены - «без масштаба», а выравнивание сцены - ТОЛЬКО ВЛЕВО. Я изменяю размер перемещения клипа на фактическую высоту и ширину родительского клипа, используя следующее в событии OnResize:

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

Но это не работает. Два важных момента:

  1. Он работал раньше, когда использовался Flash Player старше 10.
  2. Теперь это работает только тогда, когда я изменяю размер окна. Я просто не могу понять, почему это создает проблему.

Любая помощь любого рода будет высоко оценена, поскольку я заблокирован только из-за этого. Я не хочу использовать режим точного масштабирования сцены.

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Помните, что 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;
}
0 голосов
/ 23 марта 2011

Вы, вероятно, применяете преобразование до того, как объект был добавлен на сцену, и, таким образом, ссылка на стадию равна нулю или его свойства равны нулю. Вы должны добавить прослушиватель событий к объекту Event.ADDED_TO_STAGE и затем в обратном вызове события применить ваши преобразования. Также вам не нужно обращаться к объекту stage через object.stage, stage должен быть статической сущностью, которую вы можете вызывать как внутри объекта, так и вне его. Если вы не можете получить доступ к этапу, просто набрав «stage» из области, в которой вы применяете это преобразование, вероятно, это будет причиной проблемы. Как я уже сказал, попробуйте использовать событие ADDED_TO_STAGE, примените преобразования внутри этого обратного вызова, и все будет хорошо, если я прав. Также, когда вы пытаетесь привести объект, который вы опубликовали выше, используйте ключевое слово «как». Пример:

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

Ваше утверждение, что проигрыватель YouTube "не поддерживает этот метод", на самом деле не имеет смысла, поскольку это не имеет никакого отношения к YouTube или любому другому внешнему API. Кастинг / преобразование типов - это особенность языка программирования. Единственный случай, когда это утверждение будет верным, - это если у игрока на YouTube нет общего наследования с объектом MovieClip, и в этом случае вы получите ошибку приведения типов во время выполнения (возможно, даже во время компиляции в некоторых случаях), сообщающую, что вы просто не может разыграть объект как совершенно другой объект. В любом случае, надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...