Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   динамическая загрузка файлов (http://www.flasher.ru/forum/showthread.php?t=137072)

Stajor 04.03.2010 01:10

динамическая загрузка файлов
 
сделал контейнер, пытаюсь загрузить в него игру, получаю вот такую ошибку
Цитата:

ArgumentError: Error #2180: It is illegal to move AVM1 content (AS1 or AS2) to a different part of the displayList when it has been loaded into AVM2 (AS3) content.
at flash.display::DisplayObjectContainer/addChild()
at Untitled_fla::MainTimeline/onCompleteHandler()
вот код

Код AS3:

function startLoad() {
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest("http://www.mysite.loc/swf/game.swf");
        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
        mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler);
        mLoader.load(mRequest);
}
 
function onCompleteHandler(loadEvent:Event) {       
        addChild(loadEvent.currentTarget.content);
}
 
function onProgressHandler(mProgress:ProgressEvent) {
        var percent:Number = mProgress.bytesLoaded / mProgress.bytesTotal;
        trace(percent);
}
startLoad();


dimarik 04.03.2010 01:14

Ну типа нельзя переносить контент loader.content или loader.contentLoaderInfo.content (в данном случае это один и тот же объект), коим и является Ваш loadEvent.currentTarget.content в другой контейнер (у Вас это this), если этот контент является AVM1 movie. Делайте добавление самого лоадера, а там и его контент подтянется
Код AS3:

addChild(loadEvent.currentTarget.loader)


Stajor 04.03.2010 01:21

Цитата:

Сообщение от dimarik (Сообщение 890747)
Ну типа нельзя переносить контент loader.content или loader.contentLoaderInfo.content, коим и является Ваш loadEvent.currentTarget.content в другой контейнер (у Вас это это this), если этот контент является AVM1 movie. Делайте
Код AS3:

addChild(loadEvent.currentTarget.loader)


спасибо. я недавно начал работать с АС и не знаю все тонкости. вот возник еще вопрос как пропорционально увеличить размер загружаемого файла, если размеры контейнера 500 х 500, а размер игры 350 х 400

dimarik 04.03.2010 01:31

Манипулируйте свойствами width и height контейнера.
Пропорции изучаются... дай бох памяти, в пятом классе?

Stajor 04.03.2010 01:51

Цитата:

Сообщение от dimarik (Сообщение 890749)
Манипулируйте свойствами width и height контейнера.
Пропорции изучаются... дай бох памяти, в пятом классе?

:) когда был тот пятый класс ...

Спасибо за наводку.

И последний вопрос (я надеюсь). flasvars подгружаемому клипу надо передавать в ручную или он и так их видит?

dimarik 04.03.2010 02:27

Ну да. Он их видит с расстояния 5 метров всего лишь ). Лучше вножную.

Но на одном мы сошлись. Передавать их надо. Поскольку доступа к loader.contentLoaderInfo.parameters у AVM1 Movie нет и не будет (?), то советую передавать их в query string на старте загрузки. Типа
Код AS3:

loader.load( new URLRequest("http://aaa.aaa/dir/myAVM1swf.swf?var1=2&var2=asd") )


Stajor 04.03.2010 03:03

Цитата:

Сообщение от dimarik (Сообщение 890763)
Ну да. Он их видит с расстояния 5 метров всего лишь ). Лучше вножную.

Но на одном мы сошлись. Передавать их надо. Поскольку доступа к loader.contentLoaderInfo.parameters у AVM1 Movie нет и не будет (?), то советую передавать их в query string на старте загрузки. Типа
Код AS3:

loader.load( new URLRequest("http://aaa.aaa/dir/myAVM1swf.swf?var1=2&var2=asd") )


так и думал, спасибо.

Возникла проблема, при ресайзинге, персонаж ушел под "землю"

[IMG]http://img401.**************/img401/2363/20100304005833.png[/IMG]

Код AS3:

function onCompleteHandler(loadEvent:Event) {
        trace(
                "Stage size: " + stage.stageWidth + " x " + stage.stageHeight +
                "\nMovie size: " + loadEvent.currentTarget.loader.width + " x " + loadEvent.currentTarget.loader.height +
                "\nMovie content size: " + loadEvent.currentTarget.loader.content.width + " x " + loadEvent.currentTarget.loader.content.height
        );
 
        var loaderNewWidth:Number;
        var loaderNewHeight:Number;
        var loaderWidth:Number                = loadEvent.currentTarget.loader.content.width;
        var loaderHeight:Number        = loadEvent.currentTarget.loader.content.height;
        var destinationRatio:Number        = stage.stageWidth / stage.stageHeight;
        var targetRatio:Number                = loaderWidth / loaderHeight;
 
        if (targetRatio > destinationRatio) {
                loaderNewHeight = (stage.stageWidth / loaderWidth) * loaderHeight;
                loaderNewWidth = stage.stageWidth;
        }
        else {
                loaderNewWidth = (stage.stageHeight / loaderHeight) * loaderWidth;
                loaderNewHeight = stage.stageHeight;
        }
 
        trace(loaderNewWidth + " x " + loaderNewHeight);
 
        //loadEvent.currentTarget.loader.width = loaderNewWidth;
        //loadEvent.currentTarget.loader.height = loaderNewHeight;
        loadEvent.currentTarget.loader.content.width        = loaderNewWidth;
        loadEvent.currentTarget.loader.content.height        = loaderNewHeight;
 
        loadEvent.currentTarget.loader.content.x = 0;
        loadEvent.currentTarget.loader.content.y = 0;
 
        addChild(loadEvent.currentTarget.loader)
}


dimarik 04.03.2010 03:16

Я так понимаю, что размер AVM1Movie больше, чем размер персонажа ) Сделайте
Код AS3:

// Мой любимый цвет для визуального тестирования bounds чего-нить визуального.
loadEvent.currentTarget.loader.opaqueBackground = 0xFF0000;

И все будет понятно.

ЗЫ Вы очередной Вконтактер? )
зызы Забываю все время спросить Вас. Вот Вы говорите: - мол есть "динамическая" загрузка файлов. А я спрашиваю: - а что такое тогда "нединамическая" загрузка файлов?

Stajor 04.03.2010 03:36

Цитата:

Сообщение от dimarik (Сообщение 890774)
ЗЫ Вы очередной Вконтактер? )
зызы Забываю все время спросить Вас. Вот Вы говорите: - мол есть "динамическая" загрузка файлов. А я спрашиваю: - а что такое тогда "нединамическая" загрузка файлов?

Нет в контатке не сижу и не думал для них писать, но теперь задумался. я пытаюсь аппликацию для facebook написать (я там обитаю). сделал как вы сказали, подогнал размеры, но не помогло. Вот что получаю из trace.

Цитата:

Stage size: 500 x 357
размер игры: 499.7000599880024 x 357
P.S. динамическая потому что должна получать путь до swf через flashvars и загружать игры. Пытался сделать на Flex, тоже не получалось. и файл был в разы больше. Теперь вот решил попробовать на чистом AS, но похоже знаний у меня сильно не хватает.

dimarik 04.03.2010 03:45

На скриншоте я отчетливо вижу пару артефактов, говорящих о забавном ресайзе: стена парит на несколько пикселей над землей и в толще почвы прослеживается пара отчетливо видных горизонтальных линий. Если это так и предусмотрено в оригинале, то все ок.

Однако если я предположу, что позиционирование некоторых объектов внутри AVM1Movie происходит относительно размеров его _root, то это будет наивно? Не пытались ли Вы запустить эту флеху без ресайза?

Цитата:

размеры контейнера 500 х 500, а размер игры 350 х 400
и
Цитата:

Stage size: 500 x 357, размер игры: 499.7000599880024 x 357
По-моему что-то неправильно с размерами контейнера.


Часовой пояс GMT +4, время: 01:01.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.