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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.12.2009, 14:03
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 11  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
2 mooncar: Скажите, а если я загружаю несколько картинок, то для каждой нужно создавать свой MovieClipLoader?


Последний раз редактировалось greep; 23.12.2009 в 14:09.
Старый 23.12.2009, 14:52
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 12  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Как раз не обязательно.
А onLoadInit обладает аргументом-ссылкой на мувик, куда происходит загрузка (target_mc в моем примере), то есть будет знать, с каким именно контейнером делать что-то дальше.

Старый 23.12.2009, 15:17
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 13  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
Только вот ни как не могу понять: target_mc в нашем случае это что?

И почему не работает это?....

Код AS1/AS2:
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);
Добавлено через 42 минуты
Код AS1/AS2:
_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);
Знаю что все это можно написать в 10 строк, просто пытаюсь сократить число возможных ошибок... Потом перепишу нормально, но почему свойства loader4 передаются всем подгружаемым мувиклипам? И как сократить все это неработающее безумие? Может дело в this.onLoadInit?


Последний раз редактировалось greep; 23.12.2009 в 15:43.
Старый 23.12.2009, 16:22
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 14  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Если у вас loadClip идут в одном порядке, то это не означает, что загрузка будет происходить в том же порядке.
Так писать нельзя - код AS работает асинхронно, и неизвестно, что загрузится раньше. Для этого и onLoadInit придумали.

Код AS1/AS2:
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 - это контейнер в контейнере
}
Насчет альфы я не понял, как вам надо, делайте сами, отталкиваясь от num.

После загрузки нового контента в контейнере убивается вся начинка, включая переменные. Поэтому приходится делать контейнер в контейнере, чтобы запомнить номер контейнера, чтобы его в дальнейшем можно было вытащить и использовать в onLoadInit.

Вообще мой вам совет - поймите, как работает MovieClipLoader, и для чего нужен onLoadInit. Без этого понимания все тут - пустой звук.


Последний раз редактировалось mooncar; 23.12.2009 в 16:43.
Старый 23.12.2009, 17:48
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 15  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
Уууфффхххх.... В роде стало получаться... Большое СПАСИБО!


Последний раз редактировалось greep; 23.12.2009 в 17:56.
Старый 23.12.2009, 17:55
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 16  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Все не так. Вы все в кучу смешали. Погодите-ка.
1. Я же говорил - все действия нужно выполнять из onLoadInit.
А у вас опять идет какое-то создание createEmptyMovieClip("mc123" в непонятный момент времени.
Зачем у вас _x, _y, _alpha нулю приравниваются?

Еще раз точно сформулируйте - что вам нужно? Загрузить несколько картинок, а потом сделать для каждой несколько копий? Нужно ли вам сохранять оригиналы?


Последний раз редактировалось mooncar; 23.12.2009 в 18:05.
Старый 23.12.2009, 18:20
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 17  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
Код AS1/AS2:
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;
	}
}
Этот кусок наконец начал работать! Только странно то, что в массиве битмапов картинки идут не по порядку а наоборот О_о А в целом мне нужно подгрузить 4 картинки в 4 мувиклипа. А дальше выводить на верх нужную картинку либо через заданный промежуток времени либо при нажатии на кнопку, копируя оригинальный мувиклип с картинкой на уровень выше остальных, стирая старые копии, которые уже не видно. Либо эти же оригиналы перемещать.

Старый 23.12.2009, 18:20
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 18  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вот вам код. Получаем 10 копий каждой картинки в 4 ряда.
Код AS1/AS2:
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;
		}
	}	
}
Добавлено через 2 минуты
Вместо цикла в конце нужно просто повесить аттач битмапы на onRelease кнопки.
И тогда можно убрать count - он служит лишь для отслеживания момента, когда считаются все картинки. По номеру num это делать нельзя, так как сперва может загрузится 3, потом 2, потом 4, потом 1 картинки или как угодно - зависит от их веса.

То, что вам странно, как раз с этим связано - сперва загрузилась 4, потом 3 и т.д. Для индексов нужно брать запомненный раньше в контейнере верхнего уровня номер, а не счетчик.

И не забывайте - "копировать" вам ничего не удастся, можно просто после создания копий с приаттаченной битмапой задать им, например, _visible = false и проявлять через_visible = true или еще как-то.

Добавлено через 9 минут
Зачем вам onEnterFrame ?! Избавляйтесь от "индийского" когда. События можно и нужно четко отследить - когда и что происходит.


Последний раз редактировалось mooncar; 23.12.2009 в 18:32.
Старый 23.12.2009, 18:33
greep вне форума Посмотреть профиль Отправить личное сообщение для greep Найти все сообщения от greep
  № 19  
Ответить с цитированием
greep
 
Аватар для greep

Регистрация: Jun 2002
Адрес: on the backyard
Сообщений: 285
Отправить сообщение для greep с помощью ICQ
2 mooncar: спасибо за помощь! Я просто хочу разобраться как следует. То что мне нужно — можно увидеть на сайта диджитал.ру там крутилка картинок с акциями.

Старый 23.12.2009, 18:40
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 20  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Хорошо. Не забывайте только самое главное: все, что вы хотите сделать в дальнейшем, нужно делать изнутри onLoadInit. Причем в вашем случае изнутри проверки на загруженность всего:
Код AS1/AS2:
this.onLoadInit = function (target_mc:MovieClip) { 
.
.
.
	if (count == 4) {
		myFunction ();
	}
}
 
function myFunction () {
  //какие-то действия - создание копий, назначения на них onRelease и т.д....
}
Учтите - что касается AS, то строчка, записанная под другой не дает гарантии того, что она исполнится именно за нею.
А использование onEnterFrame где ни попадя - это не выход. Нужно отслеживать события, нужно отслеживать аргументы функций и адресацию мувиков.
Тогда код станет работать правильно, будет коротким, и результат его работы будет нересурсоемким и не будет зависеть от скорости соединения инета.


Последний раз редактировалось mooncar; 23.12.2009 в 18:45.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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