|
|
|||||
2 mooncar: Скажите, а если я загружаю несколько картинок, то для каждой нужно создавать свой MovieClipLoader?
Последний раз редактировалось greep; 23.12.2009 в 14:09. |
|
|||||
Модрон-ветеринар
|
Как раз не обязательно.
А onLoadInit обладает аргументом-ссылкой на мувик, куда происходит загрузка (target_mc в моем примере), то есть будет знать, с каким именно контейнером делать что-то дальше. |
|
|||||
Только вот ни как не могу понять: target_mc в нашем случае это что?
И почему не работает это?.... var loader1:MovieClipLoader = new MovieClipLoader (); loader1.addListener (this); this.onLoadInit = function () { _root.mc1._x = 0; _root.mc1._y = 0; _root.mc1._alpha = 0; i++ } loader1.loadClip("1.jpg", _root.mc1); _root.createEmptyMovieClip("mc1", _root.getNextHighestDepth()); _root.createEmptyMovieClip("mc2", _root.getNextHighestDepth()); _root.createEmptyMovieClip("mc3", _root.getNextHighestDepth()); _root.createEmptyMovieClip("mc4", _root.getNextHighestDepth()); var loader1:MovieClipLoader = new MovieClipLoader (); loader1.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { target_mc._x = 10; target_mc._y = 0; target_mc._alpha = 10; i+=1; //trace(i); } var loader2:MovieClipLoader = new MovieClipLoader (); loader2.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { target_mc._x = 20; target_mc._y = 0; target_mc._alpha = 0; i+=1; //trace(i); } var loader3:MovieClipLoader = new MovieClipLoader (); loader3.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { target_mc._x = 30; target_mc._y = 0; target_mc._alpha = 0; i+=1; //trace(i); } var loader4:MovieClipLoader = new MovieClipLoader (); loader4.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { target_mc._x = 0; target_mc._y = 0; target_mc._alpha = 10; i+=1; //trace(i); } loader1.loadClip("1.jpg", _root.mc1); loader2.loadClip("2.jpg", _root.mc2); loader3.loadClip("3.jpg", _root.mc3); loader4.loadClip("4.jpg", _root.mc4); Последний раз редактировалось greep; 23.12.2009 в 15:43. |
|
|||||
Модрон-ветеринар
|
Если у вас loadClip идут в одном порядке, то это не означает, что загрузка будет происходить в том же порядке.
Так писать нельзя - код AS работает асинхронно, и неизвестно, что загрузится раньше. Для этого и onLoadInit придумали. var loader:MovieClipLoader = new MovieClipLoader (); loader.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { //target_mc - это image внутри mc1, mc2... var item:MovieClip = target_mc._parent ; //здесь получаем ссылки на mc1, mc2... var num:Number = item.num; //вспоминаем номер item._x = 10 * num; item._y = 0; item._alpha = 10 * num; //к примеру... } for (i = 1; i <= 4; i++) { var item:MovieClip = _root.createEmptyMovieClip('mc' + i, _root.getNextHighestDepth()); item.num = i; //запоминаем номер loader.loadClip(i + '.jpg', item.createEmptyMovieClip('image', 0)); //image - это контейнер в контейнере } После загрузки нового контента в контейнере убивается вся начинка, включая переменные. Поэтому приходится делать контейнер в контейнере, чтобы запомнить номер контейнера, чтобы его в дальнейшем можно было вытащить и использовать в onLoadInit. Вообще мой вам совет - поймите, как работает MovieClipLoader, и для чего нужен onLoadInit. Без этого понимания все тут - пустой звук. Последний раз редактировалось mooncar; 23.12.2009 в 16:43. |
|
|||||
Уууфффхххх.... В роде стало получаться... Большое СПАСИБО!
Последний раз редактировалось greep; 23.12.2009 в 17:56. |
|
|||||
Модрон-ветеринар
|
Все не так. Вы все в кучу смешали. Погодите-ка.
1. Я же говорил - все действия нужно выполнять из onLoadInit. А у вас опять идет какое-то создание createEmptyMovieClip("mc123" в непонятный момент времени. Зачем у вас _x, _y, _alpha нулю приравниваются? Еще раз точно сформулируйте - что вам нужно? Загрузить несколько картинок, а потом сделать для каждой несколько копий? Нужно ли вам сохранять оригиналы? Последний раз редактировалось mooncar; 23.12.2009 в 18:05. |
|
|||||
import flash.display.BitmapData; var EVENTSBITMAP:Array = new Array(); var count:Number = 0; var lastpic:Number = 1; var loader:MovieClipLoader = new MovieClipLoader (); loader.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { //target_mc - это image внутри mc1, mc2... var item:MovieClip = target_mc._parent ; //здесь получаем ссылки на mc1, mc2... var num:Number = item.num; //вспоминаем номер count++; item._x = 0; item._y = 0; item._alpha = 0; var myImg:BitmapData = new BitmapData(target_mc._width, target_mc._height, false); myImg.draw(target_mc); EVENTSBITMAP[count] = myImg; //trace(count) } for (i = 1; i <= 4; i++) { var item:MovieClip = _root.createEmptyMovieClip('mc' + i, _root.getNextHighestDepth()); item.num = i; //запоминаем номер loader.loadClip(i + '.jpg', item.createEmptyMovieClip('image', 0)); //image - это контейнер в контейнере } onEnterFrame = function(){ if (count == 4){ _root.createEmptyMovieClip("mc123", _root.getNextHighestDepth()); _root.mc123.attachBitmap(EVENTSBITMAP[4], 0); delete onEnterFrame; } } |
|
|||||
Модрон-ветеринар
|
Вот вам код. Получаем 10 копий каждой картинки в 4 ряда.
import flash.display.BitmapData; var BITMAPDATA:Array = new Array(); var count:Number = 0; var loader:MovieClipLoader = new MovieClipLoader (); loader.addListener (this); this.onLoadInit = function (target_mc:MovieClip) { //target_mc - это image внутри mc1, mc2... count++; //просто счетчик количества загруженных картинок var item:MovieClip = target_mc._parent ; //здесь получаем ссылки на mc1, mc2... var num:Number = item.num; //вспоминаем номер var myImg:BitmapData = new BitmapData(target_mc._width, target_mc._height, false); myImg.draw(target_mc); BITMAPDATA[num] = myImg; item.removeMovieClip(); //удаляем оригинад if (count == 4) { duplicate (); } } for (i = 1; i <= 4; i++) { var item:MovieClip = _root.createEmptyMovieClip('mc' + i, _root.getNextHighestDepth()); item.num = i; //запоминаем номер loader.loadClip(i + '.jpg', item.createEmptyMovieClip('image', 0)); //image - это контейнер в контейнере } function duplicate () { for (i = 1; i <= 4; i++) { for (j = 1; j <= 10; j++) { var item:MovieClip = _root.createEmptyMovieClip('mc' + i + '_' + j , _root.getNextHighestDepth()); item.attachBitmap(BITMAPDATA[i], 0); item._x = i * 100; item._y = j * 100; } } } Вместо цикла в конце нужно просто повесить аттач битмапы на onRelease кнопки. И тогда можно убрать count - он служит лишь для отслеживания момента, когда считаются все картинки. По номеру num это делать нельзя, так как сперва может загрузится 3, потом 2, потом 4, потом 1 картинки или как угодно - зависит от их веса. То, что вам странно, как раз с этим связано - сперва загрузилась 4, потом 3 и т.д. Для индексов нужно брать запомненный раньше в контейнере верхнего уровня номер, а не счетчик. И не забывайте - "копировать" вам ничего не удастся, можно просто после создания копий с приаттаченной битмапой задать им, например, _visible = false и проявлять через_visible = true или еще как-то. Добавлено через 9 минут Зачем вам onEnterFrame ?! Избавляйтесь от "индийского" когда. События можно и нужно четко отследить - когда и что происходит. Последний раз редактировалось mooncar; 23.12.2009 в 18:32. |
|
|||||
2 mooncar: спасибо за помощь! Я просто хочу разобраться как следует. То что мне нужно — можно увидеть на сайта диджитал.ру там крутилка картинок с акциями.
|
|
|||||
Модрон-ветеринар
|
Хорошо. Не забывайте только самое главное: все, что вы хотите сделать в дальнейшем, нужно делать изнутри onLoadInit. Причем в вашем случае изнутри проверки на загруженность всего:
this.onLoadInit = function (target_mc:MovieClip) { . . . if (count == 4) { myFunction (); } } function myFunction () { //какие-то действия - создание копий, назначения на них onRelease и т.д.... } А использование onEnterFrame где ни попадя - это не выход. Нужно отслеживать события, нужно отслеживать аргументы функций и адресацию мувиков. Тогда код станет работать правильно, будет коротким, и результат его работы будет нересурсоемким и не будет зависеть от скорости соединения инета. Последний раз редактировалось mooncar; 23.12.2009 в 18:45. |
Часовой пояс GMT +4, время: 22:35. |
|
« Предыдущая тема | Следующая тема » |
|
|