Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.04.2012, 18:51
LightDemon вне форума Посмотреть профиль Отправить личное сообщение для LightDemon Найти все сообщения от LightDemon
  № 1  
Ответить с цитированием
LightDemon

Регистрация: Apr 2012
Сообщений: 3
По умолчанию Как дождаться окончание загрузки Loader()

Загружаю картинку с помощью Loader() :

Код AS3:
public function loadFon01(dir:String):void {
			var loader01=new Loader  ;
			trace(dir);
			var urlReq:URLRequest=new URLRequest(dir);
			loader01.contentLoaderInfo.addEventListener(Event.COMPLETE,placeImage);
			loader01.load(urlReq);
			trace ("Func loadFon01 End");
 
private function placeImage(event:Event):Object {
 
			var loader01:Loader=Loader(event.target.loader);
			var myImage:Bitmap=Bitmap(loader01.content);
			myImage.x=0;
			myImage.y=0;
			myImage.width=550;
			myImage.height=400;
			trace('нарисовали');
			return myImage;
		}
Как сделать так чтобы функция placeImage выполнялась не по Event.COMPLETE, а по окончанию загрузки внутри функции loadFon01?

Старый 22.04.2012, 19:03
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 2  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Вы всё правильно делаете. Можно, конечно, слегка оптимизировать код.

Можно сюда:
loader01.contentLoaderInfo.addEventListener(Event.COMPLETE,placeImage);
вместо ссылки на функцию вставить саму функцию, но тогда получится анонимная функция. Это плохая практика. Не делайте так.

Старый 22.04.2012, 19:04
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Никак. Загрузка асинхронна.
__________________
тут я

Старый 22.04.2012, 20:33
LightDemon вне форума Посмотреть профиль Отправить личное сообщение для LightDemon Найти все сообщения от LightDemon
  № 4  
Ответить с цитированием
LightDemon

Регистрация: Apr 2012
Сообщений: 3
Цитата:
Сообщение от illuzor Посмотреть сообщение
Вы всё правильно делаете. Можно, конечно, слегка оптимизировать код.

Можно сюда:
loader01.contentLoaderInfo.addEventListener(Event.COMPLETE,placeImage);
вместо ссылки на функцию вставить саму функцию, но тогда получится анонимная функция. Это плохая практика. Не делайте так.
Это понятно, но функция в любом случае будет выполняться только по наступлению события Event.Complete. А задача в том чтобы дальнейший код программы выполнялся только по окончанию загрузки...

Цитата:
Сообщение от КорДум Посмотреть сообщение
Никак. Загрузка асинхронна.
Никак - это не ответ. В программирование вообще нет задач которые никак нельзя решить, в принципе решение должно выглядеть примерно так
Код AS3:
public function loadFon01(dir:String):void {
			var loader01=new Loader  ;
			trace(dir);
			var urlReq:URLRequest=new URLRequest(dir);
			loader01.load(urlReq);
// запускаем цикл проверяющий осуществилась ли загрузка
placeImage();
			trace ("Func loadFon01 End");
только вот что в цикле писать не знаю, потому что плохо разбираюсь в отслеживании событий.

Старый 22.04.2012, 20:44
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 5  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Можно через while проверять. Но зачем? Это очень корявый костыль. Правильно - слушать окончание загрузки.

Цитата:
В программирование вообще нет задач которые никак нельзя решить
Существует такая вещь, как ограничения технологии.

Объясните, зачем вам вообще это?

Старый 22.04.2012, 20:45
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
И Ваше приложение повесится намертво, ибо во флеше один поток и словить событие лоадера не получится.
Ну не намертво, на 15 секунд, после чего придет предложение прервать работу приложения.
__________________
тут я

Старый 22.04.2012, 20:46
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 7  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Нельзя. Сознательно Adobe так сделала, чтобы не вешали интерфейс активным ожиданием и не ели ресурсы. Вы там хоть факториал миллиона считайте. Синхронных методов для загрузки или работы с файловой системой нет.
Цитата:
В программирование вообще нет задач которые никак нельзя решить
Решить можно, в вот желание писать код не так как надо а как хочется воплотить нельзя. Флаг в руки, можете конечно поискать, только потом поделитесь успехом такого мероприятия.
__________________
:)

Старый 22.04.2012, 20:46
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 8  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от LightDemon Посмотреть сообщение
В программирование вообще нет задач которые никак нельзя решить, в принципе решение должно выглядеть примерно так
Вы так говорите как будто вы изобрели "программирование".

Старый 22.04.2012, 22:21
LightDemon вне форума Посмотреть профиль Отправить личное сообщение для LightDemon Найти все сообщения от LightDemon
  № 9  
Ответить с цитированием
LightDemon

Регистрация: Apr 2012
Сообщений: 3
Цитата:
Сообщение от Bgg Посмотреть сообщение
Вы так говорите как будто вы изобрели "программирование".
Нет, программирование я конечно не изобретал, это скорее философский вопрос, что в жизни нет нерешаемых проблем!
КорДум, без обид, может я немного грубо ответил, но просто я не признаю ответ "никак", мне больше по душе как ответил Aquahawk, хотя по сути он сказал то же, что и Вы.

Просто до этого я в основном занимался функциональным программированием, и с объектно-ориентированным не сталкивался, поэтому возникают сложности с унаследованием классов и отслеживанием событий...

Цитата:
Сообщение от illuzor Посмотреть сообщение
Объясните, зачем вам вообще это?
Эти функции у меня написаны в классе с помощью которого я хочу загрузить фоновую картинку. В основном классе создаю экземпляр loadFon и пытаюсь с помощью AddChild добавить в область видимости возвращаемый myImage вот так:
Код AS3:
public function Main () {
var myFon= new loadFon();
var myImage=myFon.loadFon01(dir01);
trace (myImage)
addChild(myImage)
}
но почему-то addChild выполняется раньше чем placeImage

Старый 22.04.2012, 22:53
illuzor вне форума Посмотреть профиль Отправить личное сообщение для illuzor Найти все сообщения от illuzor
  № 10  
Ответить с цитированием
illuzor
 
Аватар для illuzor

Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
Цитата:
Сообщение от КорДум Посмотреть сообщение
И Ваше приложение повесится намертво, ибо во флеше один поток и словить событие лоадера не получится.
Ну не намертво, на 15 секунд, после чего придет предложение прервать работу приложения.
Это да. Стормозил, не подумал...

LightDemon, может вам пока что стоит взять какой-нибудь сторонний лоадер?
Или чуть поглубже изучить as3.

Loader можно сразу добавить на сцену, но картинка отобразится тогда, когда будет загружена.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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