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

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

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

Регистрация: Jun 2007
Сообщений: 118
По умолчанию Проблема с onLoadInit

Пытаюсь сделать галерею. Есть такой код:

Код:
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);

var dist:Number = 12;

// создаем объект XML
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;

 // запускаем цикл по XML
 for (var i = 0; i<total; i++) {
  var image:String = my_xml.firstChild.childNodes[i].attributes.small;

  var cont:MovieClip = container_mc.createEmptyMovieClip("cont"+i, i);
  var img:MovieClip = cont.createEmptyMovieClip("img", 1);

  loader.loadClip(image,img);

  // это номер клипа
  cont.count = i;

  listener.onLoadInit = function(target:MovieClip) {
   if (target._parent.count%2 == 0) {
    target._y = (98-target._height/2)-10;
   } else {
    target._y = (98-target._height/2)+10;
   }

   target._x = target._width*target._parent.count;
   trace(target._parent.count);
  };
 }
}
};

// грузим XML
my_xml.load("gallery.xml");
Проблема в том, что картинки в галерее имеют одинаковую высоту, но разную ширину.
И для того, чтобы узнать как расположить картинки я внутри onLoadInit умножаю ширину текущего клипа на счетчик target._parent.count, в котором содержится номер текущего клипа (0, 1, 2, 3, 4, 5, 6).

Но проблема в том, что trace(target._parent.count); выдает номера клипов в обратном порядке, т.е. (6, 5, 4, 3, 2, 1). Из-за чего все картинки расставляются как попало.

Помогите пожалуйста решить проблему и расставить картинки как положено.

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Грузите картинки поочереди. Когда первая загрузилась, грузите вторую и так далее.

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

Регистрация: Jun 2007
Сообщений: 118
А это как? Подскажите код, буду очень признателен.

Старый 25.08.2008, 19:12
Obi вне форума Посмотреть профиль Отправить личное сообщение для Obi Найти все сообщения от Obi
  № 4  
Ответить с цитированием
Obi
 
Аватар для Obi

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
Код:
var count:Number = 0;
var total:Number = 10;
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();

loader.addListener(listener);

function loadNextPicture():Void {
   if(count < total) {
      var cont:MovieClip = container_mc.createEmptyMovieClip("cont"+count, count);
      var img:MovieClip = cont.createEmptyMovieClip("img", 1);
      var pathToImg:String = String("pictures/picture"+count);
      count ++;
      loader.loadClip(pathToImg ,img);
      listener.onLoadInit = loadNextPicture;
   }
};
Ну вот что-то в этом роде. Только не помню, можно ли в АС2 вызывать и тела функции эту-же функцию.


Последний раз редактировалось Obi; 25.08.2008 в 19:15.
Старый 25.08.2008, 19:19
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
http://flasher.ru/forum/showthread.php?t=114482
Код лучше смотреть на последней странице
__________________
Reality.getBounds(this);

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

Регистрация: Jun 2007
Сообщений: 118
Спасибо за ответы, буду разбираться и пробовать.

Старый 28.08.2008, 14:28
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 7  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Взял код с последней страницы как вы и сказали

Код:
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);

var arr:Array = Array();

// создаем объект XML
var my_xml:XML = new XML();
// игнорируем пробелы
my_xml.ignoreWhite = true;

my_xml.onLoad = function(success:Boolean) {
	if (success) {
		// узнаем сколько всего картинок
		var total:Number = my_xml.firstChild.childNodes.length;
		for (var k:Number = 0; k<total; k++) {
			arr.push(my_xml.firstChild.childNodes[k].attributes.small);
		}
	}
};

var dist:Number = 12;
var imgCounter:Number = 1;

listener.onLoadInit = function(target:MovieClip):Void  {
	target.flagLoaded = true;
	target._x = target._width*imgCounter;
	if (imgCounter == total) {
		loader.removeListener(listener);
		delete listener;
		delete loader;
	}
	imgCounter++;
};

function loadImg():Void {
	for (var i:Number = 0; i<=total-1; i++) {
		container_mc.createEmptyMovieClip(i,container_mc.getNextHighestDepth());
		container_mc[i].flagLoaded = false;
		loader.loadClip(arr[i],container_mc[i]);
	}
}

// грузим XML
my_xml.load("gallery.xml");

loadImg();
После того как нажимаю CTRL+Enter мне выдается сообщение о том, что скрипт выполняется очень медленно, хочу ли я отменить выполнение скрипта.

В чем моя ошибка?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Оёёй, чето совсем не так.
Во-первых, loadImg надо вызывать только после загрузки xml (в том примере что я показал не было xml, там адреса картинок известны заранее поэтому сразу начиналась загрузка). А у Вас порядок такой должен быть: Загружаем xml, считываем данные в массив и после этого запускаем последовательную загрузку. Причем последовательную - это значит что только на событие onLoadInit начинаем загрузку следующей картинки. (Собственно, давая ссылку, я подразумевал мой код)))) Обработчик onLoadInit сам разбирается с тем какую грузить, и снова запускает loadImg для следующей картинки. Перед этим он увеличивает значение счетчика и смотрит, пора ли прекращать (ну или просто смотрит по наличию объекта в массиве). Если адреса кончились - чистимся от хлама и конец. Т.е. загрузка по циклу в принципе не то что надо.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 28.08.2008 в 15:52.
Старый 28.08.2008, 17:12
GreatRash вне форума Посмотреть профиль Отправить личное сообщение для GreatRash Найти все сообщения от GreatRash
  № 9  
Ответить с цитированием
GreatRash

Регистрация: Jun 2007
Сообщений: 118
Что-то у меня ничего не получается:
Код:
var arr:Array = Array();
var imgCounter:Number = 0;
var dist:Number = 12;

// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);

// создаем объект XML
var my_xml:XML = new XML();
// игнорируем пробелы
my_xml.ignoreWhite = true;

my_xml.onLoad = function(success:Boolean) {
	if (success) {
		// узнаем сколько всего картинок
		var total:Number = my_xml.firstChild.childNodes.length;
		for (var k:Number = 0; k<total; k++) {
			arr.push(my_xml.firstChild.childNodes[k].attributes.small);
		}
		
		listener.onLoadInit = function(target:MovieClip):Void  {
			target._x = 0;
			if (imgCounter<total) {
				loadImg(imgCounter);
			} else {
				loader.removeListener(listener);
				delete listener;
				delete loader;
			}
			imgCounter++;
		};
		
		function loadImg(counter:Number) {
			container_mc.createEmptyMovieClip(counter, container_mc.getNextHighestDepth());
			loader.loadClip(arr[counter], container_mc[counter]);
		}
		
		loadImg(0);
	}
};

// грузим XML
my_xml.load("gallery.xml");
Картинки не появляются. Вроде все сделал как вы написали, после загрузки xml гружу картинку.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А, нет, не так конечно. Вы же засунули обработчик в обработчик. У Вас onLoadInit находится внутри XML.onLoad. А надо было просто вызвать из XML.onLoad начало загрузки, т.е. loadImg(0). Сам же код лоадера и листенера оставить снаружи)
Ну вот так
Код:
var arr:Array = new Array();
var imgCounter:Number = 0;
var dist:Number = 12;
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);
var total:Number = null;
// сoздаем контейнер
var container_mc:MovieClip = _root.createEmptyMovieClip("container_mc", _root.getNextHighestDepth());
// создаем объект XML
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success:Boolean) {
	if (success) {
		// узнаем сколько всего картинок
		total = my_xml.firstChild.childNodes.length;
		for (var k:Number = 0; k<total; k++) {
			arr.push(my_xml.firstChild.childNodes[k].attributes.small);
		}
		trace("XML loaded!\n--------------\nTotal : "+total+" images in List")
		loadImg(0);
	}
};
////
listener.onLoadInit = function(target:MovieClip):Void  {
	trace("--------------\nImage "+imgCounter+" loaded!")
	imgCounter++;
	target._x = dist*imgCounter;
	if (imgCounter<total) {
		loadImg(imgCounter);
	} else {
		loader.removeListener(listener);
		delete listener;
		delete loader;
	}
	
};
		
function loadImg(imgCounter:Number) {
	var pic:MovieClip = container_mc.createEmptyMovieClip("mc"+imgCounter, imgCounter);
	loader.loadClip(arr[imgCounter], pic);
}
// грузим XML
my_xml.load("gallery.xml");
__________________
Reality.getBounds(this);

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

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

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


 


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


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