Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как отобразить картинку со стороннего сайта во флеш? (http://www.flasher.ru/forum/showthread.php?t=149998)

carver_joy 04.02.2011 16:43

Как отобразить картинку со стороннего сайта во флеш?
 
Ребята собственно такой вопрос, как отобразить картинку со стороннего сайта во флеше + еще интересует как реализовать загрузку текста тоже с другого сайта, например из файла text.txt расположенного например по адресу http://site.ru/text.txt

mooncar 04.02.2011 17:54

1. Изображения и сторонние swf.

Посмотрите пример по классу MovieClipLoader.
Например, откройте новый проект, вставьте следующий код в кадр и проверьте его работу:
Код AS1/AS2:

var cont:MovieClip = this.createEmptyMovieClip('container_mc', this.getNextHighestDepth());
var mcl:MovieClipLoader = new MovieClipLoader();
mcl.loadClip('http://www.flasher.ru/forum/images/russian/flasher_logo.gif', cont);

Только есть одно важное обстоятельство: полноценно использовать загруженный контент можно только при наличии разрешения со стороны владельца сайта. Технически это выражается в том, что на стороннем сайте должен находится кросдоменник, т.е. файл политики безопасности crossdomain.xml (обычно лежит в корне), в котором указаны домены, флешкам с которых разрешено грузить и использовать их контент.
Без такого разрешения мало что можно сделать с загруженным. Например, можно изменить масштаб или аналогичные простые действия:
Код AS1/AS2:

var cont:MovieClip = this.createEmptyMovieClip('container_mc', this.getNextHighestDepth());
var mcl:MovieClipLoader = new MovieClipLoader();
 
var listener:Object = new Object();
 
listener.onLoadInit = function (mc:MovieClip)
{
        mc._xscale = mc._yscale = 50;
};
 
mcl.addListener(listener);
 
mcl.loadClip('http://www.flasher.ru/forum/images/russian/flasher_logo.gif', cont);

, однако более сложные действия без кроссдоменника с разрешением не получатся (например, отрисовать и манипулировать битмапой).

Отдельно обращаю внимание:

1) Оперировать загруженным начинать можно только изнутри обработчика события onLoadInit, как видно из примера выше. Это связано с асинхронностью работы кода, требуется отследить момент готовности загружаемого контента для начала каких-либо действий с ним.

2) Проверять лучше всего не из среды разработки, так как в ней все будет работать и без кросдоменника, а непосредственно либо из standalone плеера, либо будучи уже залитым на хостинг.

2. Текст и переменные из файлов.

По второму вопросу - ситуация похожая.
Только класс там нужно использовать LoadVars. В хелпе есть множество примеров по использованию методов этого класса, предназначенных для загрузки текстовой информации из файлов. Для загрузки и отображения текста "as is" используйте метод load и обработчик события onData. Для получения набора значений переменных и их разбора - обработчик onLoad.

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

Не вздумайте только использовать такие функции как loadMovie (для картинок) или loadVariables (для текста). Морально устарели и влекут за собой кучу проблем при попытке полноценного использования загруженного.

Hauts 05.02.2011 11:02

mooncar, в очередной раз у вас шикарный ответ.

mooncar 05.02.2011 11:21

Спасибо. Удобно тем, что потом можно ссылку давать.

Hauts 05.02.2011 11:31

Из таких ссылок можно составить краткий курс для начинающих :)

carver_joy 05.02.2011 22:36

mooncar,
Громадное спасибо - так много всего расписали! Все сидел делал, старался самостоятельно разобраться, но у меня некоторые вопросы все же остались, в коде написал:
Код AS1/AS2:

xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.load("data.xml");
xmlData.onLoad = function(success:Boolean){
//вот например отсюда данные могут попасть
a = 1;
}
//вот сюда?
txt.text = a;

Такое ощущение, что за onLoad они не могут выбраться даже _global
_______________

И немного про другое:
http://flasher.ru/forum/showthread.p...dVars&p=948129
Код AS1/AS2:

var strings:Array = [];
 
var lv:LoadVars = new LoadVars();
lv.onData = lv_onDataHandler;
lv.load("1.txt");
 
function lv_onDataHandler(source:String):Void
{
        strings = source.split("\r\n");
}

Я так понимаю данные считанны в массив strings, а что там в коде добавить, чтоб работать с ними как с массивом? Чтоб можно вывести на экран например вот так:
txt.text = strings[3]; //в текстовом поле отобразиться 3я строка из файла 1.txt
Вот этого не понял. И еще раз большое спасибо за подробное разъяснение!

Hauts 05.02.2011 23:52

По первому вопросу — onLoad вызывается, когда произошла полная загрузка, это не зависит от выполнения самого кода. В вашем случае переменная "a" будет инициализирована только после полной загрузки, но вы же пытаетесь ее использовать сразу же после того, как начали загрузку.

По второму вопросу — все, вроде правильно. Функция split возвращает массив из элементов строки, разделенных каким-либо символом.

split("") вернет массив из символов, по одному.

split("\n") вернет массив из строк.

mooncar 06.02.2011 05:43

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

PS. Не надо никаких _global.
PPS. На будущее. Один вопрос - одна тема.

dark256 06.02.2011 14:09

Просто так, до кучи, относительно анализа кода. Удобно для анализа ХМЛ-ей. Сам недавно нашел и везде теперь втыкаю. А то фиг поймешь что где глючит.


Код AS1/AS2:

        if (xmlData.status != 0)
        {
                var errorMessage:String;
                switch (xmlData.status)
                {
                        case -2 :
                                errorMessage = "A CDATA section was not properly terminated.";
                                break;
                        case -3 :
                                errorMessage = "The XML declaration was not properly terminated.";
                                break;
                        case -4 :
                                errorMessage = "The DOCTYPE declaration was not properly terminated.";
                                break;
                        case -5 :
                                errorMessage = "A comment was not properly terminated.";
                                break;
                        case -6 :
                                errorMessage = "An XML element was malformed.";
                                break;
                        case -7 :
                                errorMessage = "Out of memory.";
                                break;
                        case -8 :
                                errorMessage = "An attribute value was not properly terminated.";
                                break;
                        case -9 :
                                errorMessage = "A start-tag was not matched with an end-tag.";
                                break;
                        case -10 :
                                errorMessage = "An end-tag was encountered without a matching start-tag.";
                                break;
                        default :
                                errorMessage = "An unknown error has occurred.";
                                break;
                }
                trace ( "XML Structure Error:"+prof.status+" - "+errorMessage
        }



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

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