|
|
|||||
Регистрация: Feb 2010
Сообщений: 102
|
проблема с добавлением TextField
Имеется у меня такая проблем : есть какой нибуть *.xml в нём юрл к картинкам и описания к каждой картинке, с отображением картинок проблем нету, а вот с текстом есть. Делаю я следующим образом - после загрузки *.xml
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 секунд если не пробовать добавлять текстовое поле - всё работает хорошо и не ругается |
|
|||||
Регистрация: Dec 2009
Сообщений: 428
|
Похоже на то, что данный индекс массива пуст, мб евент срабатывает раньше чем создается текстфилд?
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
Регистрация: Feb 2010
Сообщений: 102
|
нет данный индекс массива не пуст - а вот попробовал создавать текстовое поле не в цикле а уже в ф-ции showPic и заносить то текстовое поле в массив - и всё вышло), спасибо
|
|
|||||
Регистрация: Dec 2009
Сообщений: 428
|
Ёмае, так у Вас функция-листенер вложенная? Переписывайте, у Вас могут серьезные проблемы появиться в коде
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
Регистрация: Feb 2010
Сообщений: 102
|
а можно для чайника подробнее?
пишу недавно и спросить кроме как в нете больше не у кого, сам код у меня такой, навернякак там много косяков : 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(); } } } } |
|
|||||
Регистрация: Dec 2009
Сообщений: 428
|
Нет, не вложеннная, это Вы так в примере сократили просто, так вроде норм, а вообще можно вместо 10 array сделать 1 object
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг |
|
|||||
Регистрация: Feb 2010
Сообщений: 102
|
вот до этого недорос, но если подскажете как - обязательно попробую)
|
Часовой пояс GMT +4, время: 19:14. |
|
« Предыдущая тема | Следующая тема » |
|
|