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

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

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

Регистрация: Jul 2013
Сообщений: 9
По умолчанию Проблема с getdefinition

Вообщем есть две флешки, первая загружает вторую. Во второй хранятся картинки, картинки вшиты во флешку через embed. Картинки из второй флешки в первую получаю через getDefinition.
Загружаю это всё на сервер. Включаю приложение, всё работает картинки передаются из второй флешки в первую, обновляю и после нефига ничё уже не работает.
Как мне быть? Читал в хелпе что чаще чем один раз getdefinition использовать нельзя, но ведь страница обновилась. Что за бред? Помогите, пожалуйста.

Старый 22.07.2013, 17:51
Nikto вне форума Посмотреть профиль Отправить личное сообщение для Nikto Найти все сообщения от Nikto
  № 2  
Ответить с цитированием
Nikto

Регистрация: Jul 2013
Сообщений: 9
okouser, да я даже не знаю, что логить. Выкладывать слишком много.
Чистка кэша почему-то иногда помогает, а иногда нет,. то есть после чистки оно может работать, а может и нет, но однозначно помогает перезаливка приложения.

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

Регистрация: Jul 2013
Сообщений: 9
Дебаговый плеер выдаёт такую ошибку:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
на строчке:
Код AS3:
m1[0] = new (Preloader.MenuChange.contentLoaderInfo.applicationDomain.getDefinition("Main_ChFon1") as Class)();
Как и предполагалось он не может получить доступ к нужному классу, но я не пойму что не так.

MenuChange это Loader который объявлен статически в классе Preloader. В этом же классе я гружу дополнительную swf, позже пытаюсь достать от туда картинку и получаю ошибку.

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

Регистрация: Jul 2013
Сообщений: 9
Флешка точно загрузилась, т.к. в прелоадере это проверяется.
Ставлю
Код AS3:
Security.allowDomain("*");
В Loader передаю такой LoaderContext
Код AS3:
var lc: LoaderContext = new LoaderContext();
       lc.securityDomain = SecurityDomain.currentDomain;
Вот весь код прелоадера:
Код AS3:
public class Preloader extends MovieClip 
	{
		private var z1: DisplayObject;
		private var z4: DisplayObject;
		private var z5: DisplayObject;
 
		public static const vstupr: String = "http://app.vk.com/c6121/u148888832/ec2e18914be11b.swf";
		public static const menuch: String = "http://app.vk.com/c6119/u148888832/8c54d02ce667d4.swf";
 
		public static var MenuChange: Loader;
		public static var VstupRolik: Loader;
 
		private var ml: int = 0;
		private var mt: int = 0;
		private var vl: int = 0;
		private var vt: int = 0;
 
		private var isdop: Boolean;
 
		public static var flashVars: Object;
 
		[Embed(source = "pictures/ZM/1Экран Фон.png")] public static var Zm1: Class;
		[Embed(source = "pictures/ZM/4Загрузка линии текст2.png")] public static var Zm4: Class;
		[Embed(source = "pictures/ZM/5Загрузка полная.png")] public static var Zm5: Class;
 
		public function Preloader() 
		{			
			if (stage) {
				stage.scaleMode = StageScaleMode.NO_SCALE;
				stage.align = StageAlign.TOP_LEFT;
			}
            flashVars = stage.loaderInfo.parameters as Object; 
 
			var obj: Object = JSON.parse(Preloader.flashVars.api_result);
			if (int(obj.response.IsRegister) == 0) isdop = true else isdop = false; 
			if (isdop == true)
			{
				MenuChange = new Loader();
				VstupRolik = new Loader();
				Security.allowDomain("*");
				var lc: LoaderContext = new LoaderContext();
				lc.securityDomain = SecurityDomain.currentDomain; 
				//lc.applicationDomain = ApplicationDomain.currentDomain;
				MenuChange.load(new URLRequest(menuch), lc);
				VstupRolik.load(new URLRequest(vstupr));
 
				MenuChange.addEventListener(ProgressEvent.PROGRESS, progressm);
			    VstupRolik.addEventListener(ProgressEvent.PROGRESS, progressv);
			}
 
			z1 = new Zm1();
			z4 = new Zm4();
			z5 = new Zm5();
 
			z4.alpha = 0;
			z5.alpha = 0;
 
			addChild(z1);
			addChild(z4);
			addChild(z5);
 
			addEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
 
			// TODO show loader
		}
 
		private function ioError(e:IOErrorEvent):void 
		{
			trace(e.text);
		}
 
		private function progressm(e: ProgressEvent):void
		{
				ml = e.bytesLoaded;
				mt = e.bytesTotal;
		}
 
		private function progressv(e: ProgressEvent):void
		{
				vl = e.bytesLoaded;
				vt = e.bytesTotal;
		}
 
		private function progress(e:ProgressEvent):void 
		{			
			// TODO update loader
			if (((loaderInfo.bytesLoaded+ml+vl) / (loaderInfo.bytesTotal+mt+vt)) * 100 < 50) 
			{
				z4.alpha = ((((loaderInfo.bytesLoaded+ml+vl) / (loaderInfo.bytesTotal+mt+vt)) * 100) * 2) / 100;
			} else
			{
						//if ((loaderInfo.bytesLoaded / loaderInfo.bytesTotal) * 100 < 66)
				z5.alpha = ((((loaderInfo.bytesLoaded+ml+vl) / (loaderInfo.bytesTotal+mt+vt)) * 100 - 50) * 2) / 100;			
			}	
 
		}
 
		private function checkFrame(e:Event):void 
		{
			if ((currentFrame+ml+vl) == (totalFrames+mt+vt)) 
			{
				stop();
				loadingFinished();
			}
		}
 
		private function loadingFinished():void 
		{
			removeEventListener(Event.ENTER_FRAME, checkFrame);
			loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
			loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);
			if (isdop == true)
			{
				MenuChange.removeEventListener(ProgressEvent.PROGRESS, progressm);
				VstupRolik.removeEventListener(ProgressEvent.PROGRESS, progressv);
			}
 
			// TODO hide loader
 
			removeChild(z1);
			removeChild(z4);
			removeChild(z5);
 
			startup();
		}
 
		private function startup():void 
		{
			var mainClass:Class = getDefinitionByName("Main") as Class;
			addChild(new mainClass() as DisplayObject);
		}
 
	}

Старый 22.07.2013, 21:45
Nikto вне форума Посмотреть профиль Отправить личное сообщение для Nikto Найти все сообщения от Nikto
  № 5  
Ответить с цитированием
Nikto

Регистрация: Jul 2013
Сообщений: 9
Сам не особо это понял. Но такой код прелоадера сгенерировал мне flashdevelop. Вероятно когда всё загрузилось он как-то переходит к следующему кадру, вот он и проверяет последний кадр или нет.

Добавлено через 2 часа 34 минуты
Сделал так подписал все loader'ы на событие complete и завёл флаги для проверки на завершение загрузки. Проверял наличие флагов в enter_frame. И всё заработало.
okouser, спасибо, это вы навели меня на эту мысль.

Старый 23.07.2013, 01:41
Nikto вне форума Посмотреть профиль Отправить личное сообщение для Nikto Найти все сообщения от Nikto
  № 6  
Ответить с цитированием
Nikto

Регистрация: Jul 2013
Сообщений: 9
Хорошо, спасибо, учту.
Хотя если это не эффективно, почему flashdevelop предлагает вариант preloader сделанный через ENTER_FRAME?

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

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

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


 


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


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