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

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

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

Регистрация: Jun 2007
Сообщений: 118
Question Размер загруженной картинки

Воспользовавшись поиском, вычитал как узнать размер загруженной картинки. Но проблема в том, что не могу его (размер) сохранить.
Код:
for (var i; i<total; i++) {
 var loader:MovieClipLoader = new MovieClipLoader();
 var listener:Object = new Object();
 
 var image = my_xml.firstChild.childNodes[i].attributes.small;
 var clip:MovieClip = _root.createEmptyMovieClip("img"+i, 1000+i);

 listener.onLoadComplete = function() {
  trace(clip._width);
 }
 
 loader.addListener(listener);
 loader.loadClip(image, clip);
}
Внутри функции все прекрасно узнаю. А вот сохранить не могу размер. Пробовал писать в нутри функции clip.w = clip._width;, но при трейсе вне функции получаю undefined.

Вообще в итоге мне надо расположить картинки в линию, но ширина у них может быть разная. А если я пытаюсь писать clip._x = clip._width + i * clip._width; внутри функции, то ничего не получается, т.к. i получается равна total...

Прошу, помогите решить проблему.

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

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Может так...
Код:
 var loader:MovieClipLoader = new MovieClipLoader();
 var listener:Object = new Object();

 listener.onLoadComplete = function(target:MovieClip) {
  trace(target._width);
  
  target._x = target["count"]* target._width;
 }

  loader.addListener(listener);

for (var i; i<total; i++) {
  var image = my_xml.firstChild.childNodes[i].attributes.small;
  var clip:MovieClip = _root.createEmptyMovieClip("img"+i, 1000+i);
  
  //как вариант
  clip["count"] = i;

  loader.loadClip(image, clip);
}
А вообще, лучше воспользоваться массивом, куда и запихнуть все ваши картинки

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

Регистрация: Jun 2007
Сообщений: 118
Сделал как вы посоветовали... trace(target["count"]); выдает undefined


Последний раз редактировалось GreatRash; 01.08.2008 в 16:34.
Старый 01.08.2008, 16:51
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 4  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
обработчик не тот был - нужен onLoadInit, а не onLoadComplete.

+
for (var i:Number = 1; i<5; i++)
начальную переменную задать

Старый 01.08.2008, 17:19
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 5  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Это я когда сюда писал код накосячил... на самом деле там с кодом все в порядке.
Вот полный код:
Код:
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();

listener.onLoadInit = function(target:MovieClip) {
	trace(target.["count"]);
	target._x = target["count"]* target._width;
};

loader.addListener(listener);

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;

my_xml.onLoad = function(success:Boolean) {
	if (success) {
		var total = my_xml.firstChild.childNodes.length;

		for (var i = 0; i<total; i++) {
			var image = my_xml.firstChild.childNodes[i].attributes.small;
			var clip:MovieClip = _root.createEmptyMovieClip("img"+i, 1000+i);
			
			clip["count"] = i;
			
			loader.loadClip(image,clip);
		}
	}
};

my_xml.load("gallery.xml");

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
на самом деле там с кодом все в порядке
Нет, не в порядке.
Код:
trace(target.["count"]);
Cамо собой после загрузки изображения никакой clip уже не вспомнит свой count.
Код:
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();

listener.onLoadInit = function(target:MovieClip) {
    trace(target._parent.count);
    target._x = target._parent.count* target._width;
};

loader.addListener(listener);

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;

my_xml.onLoad = function(success:Boolean) {
    if (success) {
        var total = my_xml.firstChild.childNodes.length;

        for (var i = 0; i<total; i++) {
            var image = my_xml.firstChild.childNodes[i].attributes.small;
            var clip:MovieClip = _root.createEmptyMovieClip("img"+i, 1000+i);
            var pic:MovieClip = clip.createEmptyMovieClip("img", 0);
            clip["count"] = i;
            
            loader.loadClip(image,pic);
        }
    }
};

my_xml.load("gallery.xml");
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 01.08.2008 в 18:56.
Старый 01.08.2008, 19:33
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 7  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Спасибо, попробую.
Моментально назрел вопрос: а зачем создавать еще один контейнер (который pic)?

Старый 02.08.2008, 11:55
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
1) Важный момент - контейнер это то, во что можно чтото положить, какойто объект. В этом смысле pic для картинки - не контейнер, это сама картинка и есть. Это в среде Флэш, когда Вы руками помещаете картинку внутрь какого-то клипа, она воспринимается как некий объект, лежащий в клипе, и Вы можете ее двигать, искажать и т.д.
Но - только руками. Скриптом обратиться к "просто картинке" не удастся. Если Вы создаете скажем в руте двадцать пустых клипов и загружаете их картинками, Вы имеете 20 картинок в руте, а не двадцать клипов с картинками(!), которыми Вы можете управлять внутри этих клипов. Например, чтобы наложить на каждую картинку маску, Вам придется создать двадцать масок В РУТЕ и расположить каждую из них точно над картинкой, и в дальнейшем следить за их совпадением и т.д. Не логичнее ли иметь клип-контейнер, в котором уже внутри клип-картинка?
2) В цикле Вы начинаете загрузку, и в этом же цикле присваиваете клипам, в которые будут грузиться картинки, некие свойства, например count или id, может быть какой-то текст подсказки, название и ссылка на большое изображение - всё что Вам надо сассоциировать с этой картинкой-превьюшкой. Но дело в том, что после того, как файл загрузится в клип, все эти рукотворные свойства исчезнут, так как это уже ДРУГОЙ клип. На примере картинок не очень понятно, почему так, но если вспомнить, что вообщето этот лоадер и называется MovieClipLoader, и что он предназначен для загрузки как клипов, так и картинок... Ну вот и загрузили в клип mc файл свф - этот свф теперь и есть mc. И все свойства прежнего mc (кроме стандартных свойств мувиклипа, например _x и _y) на него уже не распространяются - и это правильно и здорово. Даже если кажется что ужас и головняки))))
Итак, чтобы сохранить все нужные нам данные привязанными к этой картинке, мы просто делаем оболочку-контейнер и сохраняем данные в нем. Потом Вы поймете, что в таком способе загрузки есть еще разные резоны - например, если загруженная картинка будет отрисовываться в битмапдату и удаляться - очень удобно, когда все это происходит в ее собственной отдельной "комнате". Также в случае, когда Вы хотите наложить маску и сделать какие-то эффекты - у Вас есть готовый клип-модуль, в котором внутри - картинка в виде клипа, к которой Вы можете обращаться ВНУТРИ этого модуля, а не через рут, вычисляя каждый раз координаты и т.п.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 02.08.2008 в 12:35.
Создать новую тему Ответ Часовой пояс GMT +4, время: 02:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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