![]() |
|
||||||||||
|
|||||
|
Модрон-ветеринар
|
onLoadInit = function([target_mc]) {}
target_mc: [optional] - A movie clip loaded by a MovieClipLoader.loadClip() method.
Цитата:
Когда загружаем картинку в контейнер через loadClip, он равен И теперь у метода onLoadInit его анонимная функция знает, какой именно контейнер загружен картинкой. Внутри этой функции, как я уже сказал, он и используется для дальнейших действий с картиночным контейнером. Функция-обработчик события onLoadInit именно так и работает. Насчет массива с именованными элементами - посмотрите материалы в любом справочнике или учебнике по флешу на тему "Ассоциативные массивы". Кстати, любой мувик, или даже сам _root, если внутри него есть еще какие-то элементы - другие мувики, переменные, функции, свойства - это также ассоциативный массив, доступ элементам которого осуществляется по их именам. Например: _root['movie_mc']; this['movie' + 2 + 'mc']; movie_mc['_alpha'] = 75; btn.onRelease = this._parent['doIt']; Это - основы. sy555, target_mc - это аргумент, который, когда наступает onLoadInit, внутри функции его метода равен мувику-контейнеру, куда грузили. Дает возможность работать с мувиком-контейнером с загруженным контентом дальше - гарантирует, что загрузка завершилась. В силу асинхронности AS какие-либо действия с мувиком-контейнером с загруженной картинкой можно предпринимать дальше только внутри этого метода (точнее, его функции) - он дает гарантию завершения загрузки. Без него нельзя. Кстати, а зачем вы альфу контейнера приравняли 100? Для отладки? Эти мувики ведь временные, они будут мельтешить при загрузке картинок. Они вообще не нужны в дальнейшем. _____________________ Читайте о классе MovieClipLoader и его методах, смотрите примеры. Последний раз редактировалось mooncar; 16.10.2009 в 00:28. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 49
|
да хотел отладить, увидеть картинку.. в итоге закомментил unLoadMovie;
Так вроде понятно , еще один вопросик созрел по ходу отладки . В теле onLoadInit : EVENTSBITMAP[num] = myImg; trace(" name : "+num+ " :" + EVENTSBITMAP[num] + " hey: " ); num++; output: Вроде верно. Но когда выношу в другую функцию данные теряются.. хотя переменная описана глобально.. var linksID:Array=["1","2","3","4","5","6","7","p1","p2","p3"]; trace("linksId: " + linksID); trace ("\n"); for(u=0;u<3;u++) { linksID[u]=EVENTSBITMAP[num]; } |
|
|||||
|
Модрон-ветеринар
|
Какая переменная описана глобально? Куда что выносите?
Может ВЕСЬ код приведете, догадываться сложно, помощь вам затрудняется. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 49
|
import flash.display.BitmapData; import mx.controls.Button; var EVENTSBITMAP:Array = new Array(); //массив фото событий , глобальная переменная var num :Number= new Number(); var massiv:Array; num=0; //...... var mcLoaderEventsFoto:MovieClipLoader = new MovieClipLoader(); var listenerEFoto:Object = new Object(); var timeout:Number= new Number(); var totals:Number= new Number(); var effect:String= new String(); timeout=5000; effect="oval"; //EVENTSBITMAP=["gf","fdf","sdf"]; //XML var my_lv:LoadVars = new LoadVars(); function loadXML(loaded) { if (loaded) { xmlNode = this.firstChild; image = []; description = []; total = xmlNode.childNodes.length; totals=total; for (i=0; i<total; i++) { image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue; description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue; } firstImage(); } else { content = "file not loaded!"; } } xmlData = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = loadXML; xmlData.load("images.xml"); gogo(); //setInterval(pic_preview(5),100); function gogo() { filesize = picture.getBytesTotal(); loaded = picture.getBytesLoaded(); } // function firstImage() { if (true) { for(j=0;j<total;j++) { loadMovie(image[j], 1); trace("j: "+j + " , " + "im: "+image[j]); } } } //END XML //array tranclate mcLoaderEventsFoto.addListener(listenerEFoto); loadEventsSlide(1999,5); function loadEventsSlide (year, n) { //создание пустого мувиклипа this.createEmptyMovieClip('eventFoto' + year + n, this.getNextHighestDepth()); this['eventFoto' + year + n]._alpha = 100; //чтобы в прелоадере не мелькали загружаемые картинки //когда объект загружен ,создаем функции с входным аргументом - муви,клип listenerEFoto.onLoadInit = function (target_mc:MovieClip) { //создаем объект типа BitmapData, под подгружаемый mc var myImg:BitmapData = new BitmapData(target_mc._width, target_mc._height, false); //отборжение эффекта myImg.draw(target_mc); //выгрузка мувиклипа из контейнера //target_mc.unloadMovie(); //Массив муикльипа ,с имееными индексами заполнеяеться конкретной картикой EVENTSBITMAP[num] = myImg; trace(" name : "+num+ " :" + EVENTSBITMAP[num] + " hey: " ); num++; return EVENTSBITMAP; }; listenerEFoto.onLoadError = function (target_mc:MovieClip) {//если нет фото к событию if (year >= yearsTotal) { trace("ERROR, can't find file"); loadEventsStatus = 1; //конец } }; trace("ROUTE!::"+EventsPath + "foto/" + year + "." + n + ".jpg" + suffix ); mcLoaderEventsFoto.loadClip("fon.JPG", 1); mcLoaderEventsFoto.loadClip("fon2.JPG", 2); mcLoaderEventsFoto.loadClip("fon3.JPG", 3); //p1.loadClip("fon.JPG",1); p1.attachBitmap(EVENTSBITMAP[1], this.getNextHighestDepth()); }; //array traclate end var linksID:Array=["1","2","3","4","5","6","7","p1","p2","p3"]; trace("linksId: " + linksID); trace ("\n"); for(u=0;u<3;u++) { linksID[u]=EVENTSBITMAP[num]; } //linksID=image[]; trace("total" +linksID); for (var i:Number = 0; i < linksID.length; i++) { bitmaps[i]=BitmapData.loadBitmap(linksID[i]); } //по сути надо что бы было //bitmaps[i]= EVENTSBITMAP[i] |
|
|||||
|
Модрон-ветеринар
|
Вот это зачем?
Возврат значения функции делаем только при такой записи: и после return дальнейшие вычисления в функции останваливаются Добавлено через 4 минуты Что-то у вас в коде каша какая-то - зачем вы закомментировали загрузку loadClip, у вас же ничего грузится не будет теперь. Потом, функция за раз грузит одну картинку, вот так делать нельзя: mcLoaderEventsFoto.loadClip("fon.JPG", 1); mcLoaderEventsFoto.loadClip("fon2.JPG", 2); mcLoaderEventsFoto.loadClip("fon3.JPG", 3); Добавлено через 1 час 18 минут Едем дальше. Еще раз - вот в сжатом виде алгоритм: var BITMAPDATA:Array = new Array(); //массив фото событий ...... var mcLoaderEventsFoto:MovieClipLoader = new MovieClipLoader(); var listenerEFoto:Object = new Object(); mcLoaderEventsFoto.addListener(listenerEFoto); function loadEventsSlide (num) { this.createEmptyMovieClip('foto' + num, this.getNextHighestDepth()); this['foto' + num]._alpha = 0; //чтобы в прелоадере на виду не мелькали загружаемые картинки listenerEFoto.onLoadInit = function (target_mc:MovieClip) { var myImg:BitmapData = new BitmapData(target_mc._width, target_mc._height, false); myImg.draw(target_mc); target_mc.unloadMovie(); BITMAPDATA[target_mc._name] = myImg; }; mcLoaderEventsFoto.loadClip(num + '.jpg', this['foto' + num]); }; //вызов загрузки, например, так: for (i = 1; i < 11; i++) { loadEventsSlide(i); } Загружаем, заполняем массив. Дальше. Если записать проверку наполненности массива сразу после этого кода, то все должно быть undefined, потому что AS асинхронно работает с данными. Поэтому проверку наполненности массива мы имеем право делать: - либо внутри метода onLoadInit - либо только спустя какое-то время, когда загрузка гарантированно завершена. Для эксперимента можно нарисовать кнопку, на нее повесить вызов цикла обхода элементов массива: Последний раз редактировалось mooncar; 16.10.2009 в 12:23. |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 49
|
Спасибо большое, буду разбираться, как раз почитал про класс MovieClipLoader.
Добавлено через 6 часов 10 минут Разобрал код, потестил ,работает.. Возник вопрос, как это сделать без кнопки , надумал повесить слушатель, мол когда закончит чтение xml, запускать тоже самое что в кнопке .. var array_test:Array=new Array(); var array_test1:Array=new Array(); var image:Array=new Array(); var lisen:Object=new Object(); function array_return(loaded) { array_test=['el1','el2','el3']; for(i=0;i<array_test.length;i++) trace ("array element: " + i + " content: " + array_test[i]); // return array_test; if (loaded) { xmlNode = this.firstChild; image = []; description = []; total = xmlNode.childNodes.length; for (i=0; i<total; i++) { image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue; trace("image["+i+"]= "+image[i]); description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue; } } else { trace("file not loaded!"); } return image; } //start function xmlData = new XML(); xmlData.ignoreWhite = true; xmlData.onLoad = array_return; xmlData.load("images.xml"); lisen.onChanged =function() //Вопрос что поставить вместо onChanged { trace ("lisen is working"); } btn1.onPress=function() { array_test1=array_return(); for(j=0;j<array_test1.length;j++) trace ("j: " + j + " con: " + array_test1[j]); } array_return.addListener(lisen); Там не он onChanged понятное дело должен быть, а что то типо onComplete) не смог найди, хелп перестал работать. |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:37. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| xml , буферизация , массивы , парсинг |
|
|