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

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

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

Регистрация: Feb 2010
Сообщений: 102
По умолчанию проблема с добавлением TextField

Имеется у меня такая проблем : есть какой нибуть *.xml в нём юрл к картинкам и описания к каждой картинке, с отображением картинок проблем нету, а вот с текстом есть. Делаю я следующим образом - после загрузки *.xml
Код AS3:
for (var i:int=0; i<xmlData.children().length(); i++)
			{
				photoURL_Array[i]=xmlList[i].attribute("photoURL");
 
				captionURL_1_Array[i]=xmlList[i].attribute("captionURL_1");
 
				var t1:TextField=new TextField();
				t1.htmlText=xmlList[i].attribute("captionText_1");
				captionText_1_Array[i]=t1;
........
private function showPic(e:Event):void
{
.....
addChild(captionText_1_Array[someVar]);
.....
}
в итоге ругается такой вот фразой при компиляции :
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать []@e98f741 в flash.display.DisplayObject.
at Gira_Gallery/showPic()

Добавлено через 59 секунд
если не пробовать добавлять текстовое поле - всё работает хорошо и не ругается

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

Регистрация: Dec 2009
Сообщений: 428
Похоже на то, что данный индекс массива пуст, мб евент срабатывает раньше чем создается текстфилд?
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 29.06.2010, 16:17
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 3  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
нет данный индекс массива не пуст - а вот попробовал создавать текстовое поле не в цикле а уже в ф-ции showPic и заносить то текстовое поле в массив - и всё вышло), спасибо

Старый 29.06.2010, 16:21
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 4  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Ёмае, так у Вас функция-листенер вложенная? Переписывайте, у Вас могут серьезные проблемы появиться в коде
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 29.06.2010, 16:28
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 5  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
а можно для чайника подробнее?

пишу недавно и спросить кроме как в нете больше не у кого, сам код у меня такой, навернякак там много косяков :
Код AS3:
package {
	import caurina.transitions.Tweener;
 
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.events.TimerEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import flash.utils.Timer;
 
	[SWF(width="794", height="340", frameRate="30", backgroundColor="0xAAAAAA", quality="high")]
	public class Gira_Gallery extends Sprite
	{
		//--XML--
		private var xmlLoader:URLLoader=new URLLoader();
		private var xmlList:XMLList;
		private var xmlData:XML;
 
		//--BOOLEAN--
		private var xmlLoaded_Bool:Boolean=false;
		private var picLoaded_Bool:Boolean=true;
		private var fullCircleTimer_Bool:Boolean=false;
 
		//--ARRAYS--
		private var photoURL_Array:Array=new Array();							//массив содержащий ссылки к фотографиям
		private var photoURLCopy_Array:Array=new Array();
 
		private var captionURL_1_Array:Array=new Array();
		private var captionText_1_Array:Array=new Array();
		private var captionURL_2_Array:Array=new Array();
		private var captionText_2_Array:Array=new Array();
 
		private var captionURLCopy_1_Array:Array=new Array();
		private var captionTextCopy_1_Array:Array=new Array();
		private var captionURLCopy_2_Array:Array=new Array();
		private var captionTextCopy_2_Array:Array=new Array();
 
		private var photoHolder_Array:Array=new Array();
		private var photoLoadedBool_Array:Array=new Array();
 
		private var textField_1_Array:Array=new Array();
		private var textField_2_Array:Array=new Array();
 
		//--TIMER--
		private var timer:Timer=new Timer(10000, 1);
 
		//--OTHER--
		private var picLoader:Loader=new Loader();
		private var someVar:int=0;
		private var num:int=1;
		private var loopCounter:int=0;
 
		//--CHANGING VARIABLES--
		private var alphaDelay:int=5;			//время выполнения эффекта
		private var caption1_X:int=15;			//положение текстового поля_1 по оси X
		private var caption1_Y:int=314;			//положение текстового поля_1 по оси Y
		private var caption2_X:int=479;			//положение текстового поля_2 по оси X
		private var caption2_Y:int=314;			//положение текстового поля_2 по оси Y
		private var caption1_Size:int=18;		//рамер шрифта в текстовом поле_1
		private var caption2_Size:int=18;		//рамер шрифта в текстовом поле_2
 
		//--TEXT--
		private var loading_TF:TextField=new TextField();
 
		//загружаем *.xml
		public function Gira_Gallery()
		{
			xmlLoader.addEventListener(Event.COMPLETE, xmlLoadedFunc);		//когда *.xml загружен вызываем ф-цию xmlLoadedFunc
			xmlLoader.load(new URLRequest("gallery.xml"));					//загружаем *.xml по ссылке которая находится в ""
 
			loading_TF.x=800;
			addChild(loading_TF);
		}
 
 
		//когда *.xml загружен - заносим данные из него в соответствующие массивы
		private function xmlLoadedFunc(e:Event):void
		{
			e.target.removeEventListener(Event.COMPLETE, xmlLoadedFunc);
			xmlData=new XML(e.target.data);
			xmlList=xmlData.children();
			trace("gallery.xml loaded");
 
			for (var i:int=0; i<xmlData.children().length(); i++)			//заносим в массивы ссылки из загруженного *.xml
			{
				photoURLCopy_Array[i]=xmlList[i].attribute("photoURL");
 
				captionURLCopy_1_Array[i]=xmlList[i].attribute("captionURL_1");
				captionTextCopy_1_Array[i]=xmlList[i].attribute("captionText_1");
				captionURLCopy_2_Array[i]=xmlList[i].attribute("captionURL_2");
				captionTextCopy_2_Array[i]=xmlList[i].attribute("captionText_2");
			}
 
			randomSorting(photoURLCopy_Array, captionURLCopy_1_Array, captionTextCopy_1_Array, captionURLCopy_2_Array, captionTextCopy_2_Array);
		}
 
 
		//рандомно сортируем массив
		private function randomSorting(arr:Array, arr2:Array, arr3:Array, arr4:Array, arr5:Array):void
		{
			var oldArray:Array;
			var oldArray2:Array;
			var oldArray3:Array;
			var oldArray4:Array;
			var oldArray5:Array;
			var i:int;
 
			oldArray = arr;
			oldArray2 = arr2;
			oldArray3 = arr3;
			oldArray4 = arr4;
			oldArray5 = arr5;
 
			while (oldArray.length)
			{
				i = int(Math.random() * oldArray.length);
				photoURL_Array.push(oldArray.splice(i, 1));
				captionURL_1_Array.push(oldArray2.splice(i, 1));
				captionText_1_Array.push(oldArray3.splice(i, 1));
				captionURL_2_Array.push(oldArray4.splice(i, 1));
				captionText_2_Array.push(oldArray5.splice(i, 1));
			}
			photoURLCopy_Array=null;
			captionURLCopy_1_Array=null;
			captionTextCopy_1_Array=null;
			captionURLCopy_2_Array=null;
			captionTextCopy_2_Array=null;
 
			loadingGallery();
		}
 
 
		//подгружаем картинки
		private function loadingGallery():void
		{
			picLoader.load(new URLRequest(photoURL_Array[someVar]));
			picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, showPic);
 
			if (someVar == 0)
			{
				picLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onLoadingProgress);
			}
		}
 
 
		private function onLoadingProgress(e:ProgressEvent):void
		{
			var percentage:Number=(e.bytesLoaded/e.bytesTotal)*100;
            loading_TF.text=String(int(percentage))+"%";
		}
 
		//когда картинка загружена - выводим её на экран и запускаем на загрузку следующую
		private function showPic(e:Event):void
		{
			e.target.removeEventListener(Event.COMPLETE, loadingGallery);			//убиваем слушатель
			photoLoadedBool_Array[someVar]=true;
			photoHolder_Array[someVar]=e.target.content;
			photoHolder_Array[someVar].alpha=0;
 
			//показываем первую картинку как только она загрузилась
			if (someVar==0)
			{
				addChild(photoHolder_Array[someVar]);
				Tweener.addTween(photoHolder_Array[someVar], {alpha:1, time:alphaDelay});
 
				timer.start();
				timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerFunc);
			}
 
			//удаляем текстовое поле как только первая фотография загужена
			if (someVar==0 && !photoLoadedBool_Array[photoURL_Array.length-1])
			{
				e.target.removeEventListener(ProgressEvent.PROGRESS, onLoadingProgress);
				removeChild(loading_TF);
			}
 
			if(someVar < photoURL_Array.length-1)
            {
                someVar++;
                loadingGallery();
            }
		}
 
 
		private function timerFunc(e:TimerEvent):void
		{
			e.target.removeEventListener(TimerEvent.TIMER_COMPLETE, timerFunc);
			if (photoLoadedBool_Array[num])
			{
				Tweener.addTween(photoHolder_Array[num-1], {alpha:0, time:alphaDelay, onComplete:function():void {
																												  removeChild(photoHolder_Array[num-1]);
																									   	   		 } });
				addChild(photoHolder_Array[num]);
				Tweener.addTween(photoHolder_Array[num], {alpha:1, time:alphaDelay, onComplete:function():void {
	   																										    num++;
	   																										    if (num==photoURL_Array.length)
																												{
																													timer.start();
																													timer.addEventListener(TimerEvent.TIMER_COMPLETE, runArrayLoop);
																												}
																												if (num!=photoURL_Array.length)
																												{
																													timer.start();
																													timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerFunc);
																												}
																											   } });
			}
			else
			{
				timer.start();
				timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerFunc);
			}
		}
 
 
		private function runArrayLoop(e:TimerEvent):void
		{
			e.target.removeEventListener(TimerEvent.TIMER_COMPLETE, runArrayLoop);
			Tweener.addTween(photoHolder_Array[num-1], {alpha:0, time:alphaDelay, onComplete:function():void {
																											  removeChild(photoHolder_Array[num-1]);
																									   		 }  });
			arrayLoop();
		}
 
		//когда массив из фотографий загружен запускаем проигрыватся его по кругу
		private function arrayLoop():void
		{
			addChild(photoHolder_Array[loopCounter]);
			Tweener.addTween(photoHolder_Array[loopCounter], {alpha:1, time:alphaDelay});
 
			timer.start();
			timer.addEventListener(TimerEvent.TIMER_COMPLETE, loopTimer);
		}
 
 
		private function loopTimer(e:TimerEvent):void
		{
			if (loopCounter!=photoURL_Array.length-1)
			{
				Tweener.addTween(photoHolder_Array[loopCounter], {alpha:0, time:alphaDelay, onComplete:function():void {
																														removeChild(photoHolder_Array[loopCounter-1]);
																													   } });
				loopCounter++;
				arrayLoop();
			}
			else
			{
				Tweener.addTween(photoHolder_Array[loopCounter], {alpha:0, time:alphaDelay, onComplete:function():void {
																														removeChild(photoHolder_Array[photoHolder_Array.length-1]);
																													   } });
				loopCounter=0;
				arrayLoop();
			}
		}
	}
}

Старый 29.06.2010, 16:43
leofit вне форума Посмотреть профиль Отправить личное сообщение для leofit Найти все сообщения от leofit
  № 6  
Ответить с цитированием
leofit
 
Аватар для leofit

Регистрация: Dec 2009
Сообщений: 428
Нет, не вложеннная, это Вы так в примере сократили просто, так вроде норм, а вообще можно вместо 10 array сделать 1 object
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 29.06.2010, 16:51
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 7  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
вот до этого недорос, но если подскажете как - обязательно попробую)

Старый 29.06.2010, 17:06
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Код AS3:
captionText_1_Array.push(oldArray3.splice(i, 1));
splice возвращает массив. Попробуйте (везде)
Код AS3:
captionText_1_Array.push(oldArray3.splice(i, 1)[0]);

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

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

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


 


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


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