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

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

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

Регистрация: Feb 2007
Сообщений: 29
По умолчанию Как приостановить выполнение скрипта?

Здравствуйте уважаемые флэшеры. Возникла необходимость загрузить ресурс внутри функции и вернуть результат из функции только когда загрузка завершена (удачно или неудачно). Надеялся что можно сделать как то так:
Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.net.URLRequest;
	public class ClipLoader
	{
		private var ldr:Loader;
		private var url:URLRequest;
		public var mc:MovieClip;
		private var _result:Number;
		public function ClipLoader(path:String, _mc :MovieClip){
			mc = _mc;
			ldr = new Loader();
			url = new URLRequest(path);
			_result = 0;
		}
		public function loadResource(){
			ldr.load(url);
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,  loadComplete);
			ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadError);
			while (_result == 0){ /*вот здесь хотелось бы что то вроде функции sleep(1000), как в C++*/;}
 
			return _result;
		}
		private function loadComplete(event:Event){	mc.addChild(ldr); _result = 1;}
		private function loadError(event:IOErrorEvent){	_result = -1;}
 
	}
}
Но видимо в флеше нет функции подобной сишной sleep. Читал в хелпе по классу Timer но это видимо не мой случай, или я недопонял. Честно говоря я в растеряности. Посоветуйте что нибудь =)

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

Регистрация: Jan 2009
Адрес: Одесса
Сообщений: 309
Отправить сообщение для Fatality с помощью ICQ
А на что вам
Код AS3:
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE,  loadComplete);
Обработчик loadComplete, вызывается после полной загрузки, в нем и пишите свой цикл.

Старый 07.05.2009, 02:39
Hina вне форума Посмотреть профиль Отправить личное сообщение для Hina Найти все сообщения от Hina
  № 3  
Ответить с цитированием
Hina

Регистрация: Feb 2007
Сообщений: 29
Спасибо за ответ. Проблема вот в чём: класс предполагается использовать вот так:
(фрагмент кода класса использующего ClipLoader)
Код AS3:
		public var graphList:Array;		//массив клипов
		private var countGraphObject: Number;	//счётчик клипов
................................ .............. .....................
		public function loadClip(path:String){
			graphList.push(new MovieClip());	//Добавить новый клип в массив
			var ldr:CClipLoader = new CClipLoader(path, graphList[countGraphObject]);
			var _result = ldr.loadResource();
			if (_result == -1) return -1;	//то есть если клип загрузить не удалось вернули ложь
			countGraphObject++;
			return countGraphObject - 1;		//Иначе вернули индекс клипа в массиве graphList
		}
Мне надо загрузить несколько объектов в массив, и работать с ними по индексу. Если loadClip вернет индекс клипа в массиве ранее чем произошла полная загрузка клипа, при попытке обратится к нему по индексу я буду работать с пустым MovieClip.

Старый 07.05.2009, 13:00
RetKiller вне форума Посмотреть профиль Отправить личное сообщение для RetKiller Найти все сообщения от RetKiller
  № 4  
Ответить с цитированием
RetKiller

Регистрация: Dec 2007
Сообщений: 58
Отправить сообщение для RetKiller с помощью ICQ
Заведите функцию,которая будет загружать отдельный клип,а в обработчике loadComplete снова ее вызывайте,если загружены еще не все клипы. И только потом спокойно работайте с массивом
Код AS3:
       var clipCount:int=10;//количество клипов
       var j:int=1;            //номер текущего клипа
       var arClips:Array=new Array();
       private function initLoading():void
       {
               loadClip(j);
        }
 
       private function loadClip(i:int):void
       {
               //лоадеры,реквесты и пр.пр
               ldClipLoader.addEventListener(Event.Complete,loadComplete);
       }
 
       private function loadComplete(event:Event):void
       {
               var tempClip:MovieClip=event.currenttarget as MovieClip;//получили
               arClips.push(tempClip);
               if (j<clipCount)
               {
                   j++;
                   loadClip(j);
               }
       }
Вот примерно так. И еще. AS3 - асинхронен.

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

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

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


 


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


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