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

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

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

Регистрация: Feb 2012
Сообщений: 205
По умолчанию xml динамическая галерея

есть задача - создать динамическую галерею со сложной структурой: Разделение по темам, внутри деление по слайдам, в каждом слайде n-ное количество картинок.

в общем, первая цель - при входе создать галерею, соответствующую первой теме, внутри неё слайды, на них по 3 картинки (если не хватает для последнего слайда картинок - то там 1 или 2).
объект item лежbт в библиотеке и имеtт соответствующиq идентификатор

Сразу проблема при подгрузке символа Item из библиотеки

Код AS1/AS2:
kv=1;
this =game;
function addslide(mc:MovieClip)
	{   xmlfile='data'+kv+'.xml';
		dr.load(xmlfile);
	}
 
dr.onLoad = function(success) {
//создаём галерею
    gal=game.createEmptyMovieClip("gallery"+kv, game.getNextHighestDepth());//_root.attachMovie("gallery", "gallery"+kv);//создаём символ галереи
	for (q=0; q<Math.ceil(dr.firstChild.childNodes.length/3); q++) //определяем количество слайдов в галерее
			{	slide=game.gal.createEmptyMovieClip("slide"+q, game.getNextHighestDepth())//создаём слайд внутри галереи
				for (k=q*3; k<q*3+3; k++) 
				{  if(k<dr.firstChild.childNodes.length)
						{picHolder = this.firstChild.childNodes[k];
						 item = game.gal.slide.attachMovie("item", "item"+k, k);
						 trace(item)//UNDEFINED
						 item._x += q*40;
						 item.url = picHolder.attributes.url;
						}
				}//цикл для добавления картинок на слайд
 
		}
	}
скрипт внутри "item"
Код AS1/AS2:
var mcl:MovieClipLoader = new MovieClipLoader();
listener = {};
listener.onLoadInit = function(targ_mc) {
	targ_mc._width = 125;
	targ_mc._height = 100;
};
mc = this.createEmptyMovieClip("pic", this.getNextHighestDepth());
mcl.addListener(listener);
mcl.loadClip(url, "pic");
кто бы - кто бы мне помог?


Последний раз редактировалось Маруська; 23.10.2014 в 03:47.
Старый 23.10.2014, 02:56
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 2  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
1. Нарисуйте структуру будущей XML, описывающей галерею.

2. Напишите КОД, загружающий эту XML и распознающий её элементы.

3. Напишите код, создающий "сетку", "шаблон" галереи для произвольного слайда (с эН картинок), который начинает работать после того, как п.2 полностью отработал.

4. После этого уже грузИте туда картинки.....

п.4. - самое простое, с миллионами примеров по форуму.....

Вы же все сразу свалили в одну кучу, пронеслись галопом по европам, накидали каких-то малосвязанных и неудобочитаемых кусков кода, непонятно где и отчего поймали грабли, сказали "ааа, помогите, горе, F1" и ждете теперь чего? Что кто-то сядет, домыслит нехватающие фрагменты общей картины, угадает с одного раза содержимое п.п.1-3 и изречет вам свет истины?


И не публикуйте такие скрижали, пожалейте глаза читателей.
Код AS1/AS2:
for (q=0; q<Math.ceil(dr.firstChild.childNodes.length/3); q++) //определяем количество слайдов в галерее
Так гораздо читабельнее:
Код AS1/AS2:
 //определяем количество слайдов в галерее
var drNodeLength = Math.ceil(dr.firstChild.childNodes.length/3)
for ( var q=0; q<drNodeLength ; q++){
}

Ну и разумеется, в вашем месиве искать ошибки малореально.
Вот что вы тут делаете? Глубину вы откуда берете?
Код AS1/AS2:
   gal=game.createEmptyMovieClip("gallery"+kv, game.getNextHighestDepth());
	slide=game.gal.createEmptyMovieClip("slide"+q, game.getNextHighestDepth())
Код:
скрипт внутри "item"
И ни в коем случае НИКОГДА НЕ ПИХАЙТЕ код внутрь клипов.

cl = game.gal.slide.attachMovie("item", "item"+k, k); - вторнули на стэйдж клип
в нём, как я понимаю (догадываюсь, читаю ваши мысли()пытаюсь типа)) вы СОЗДАЕТЕ пустой клип "pic"
Зачем? Нарисуйте в нем РАМОЧКУ, обзвите ее "pic" и всё уже будет визуально установлено по своим местам.
А поскольку после аттача клипа в нем уже все есть, передавайте загрузчику имя этого клипа.
А так как они у вас все одинаковые, загрузчик уже там сам найдет куда ему чего грузить.

mcl.loadClip(url, cl.pic);
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 23.10.2014, 03:26
Маруська вне форума Посмотреть профиль Отправить личное сообщение для Маруська Найти все сообщения от Маруська
  № 3  
Ответить с цитированием
Маруська

Регистрация: Feb 2012
Сообщений: 205
1. Структура xml примитивная. просто перечисление Item url.
2, 3, 4. Код, который отлично загружает элементы xml

Код AS1/AS2:
dr = new XML();
dr.ignoreWhite = true;
dr.onLoad = function(success) {
	for (q=0; q<this.firstChild.childNodes.length; q++) {
		_root.picHolder = this.firstChild.childNodes[q];
trace(_root.picHolder.attributes.url);
	item= _root.attachMovie("item", "item"+q, q);
	item._x += q*40;
	item.url = _root.picHolder.attributes.url;
 
}
}
dr.load("data.xml");
А вот делать сложнее - это уже не "самое простое"
грабли поймала в конкретном месте подгрузки символа из библиотеки.
И в коде масса комментариев - всё очень логично.

Добавлено через 33 минуты
в общем. как справлюсь - выложу исходники

Добавлено через 1 час 4 минуты
и могли бы мне подсказать, что символы createEmptyMovieClip это не просто символы, а пути. поэтому иерархия ни к чему.
Код AS1/AS2:
dr.onLoad = function(success) {
	//создаём галерею
   gal=game.createEmptyMovieClip("gallery"+kv, game.getNextHighestDepth());
	for (q=0; q<Math.ceil(dr.firstChild.childNodes.length/3); q++) 
		{	slide=gal.createEmptyMovieClip("slide"+q, game.getNextHighestDepth())//создаём слайд
			slide._y+=q*20;
		    trace("slide._y "+slide._y);
			for (k=q*3; k<q*3+3; k++) 
				{  if(k<dr.firstChild.childNodes.length)
						{_root.picHolder = this.firstChild.childNodes[k];
						cl = slide.attachMovie("item", "item"+k, k);
						cl._x += (k-q*3)*100;
						trace("cl._x "+cl._x);
 
						cl.url = _root.picHolder.attributes.url;
						}
				}
		}
	}
Вот и всё. единственное, что я просила мне подсказать


Последний раз редактировалось Маруська; 23.10.2014 в 04:32.
Старый 23.10.2014, 11:08
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 4  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Ваш вопрос выглядит следующим образом:

Я пишу MMORPG с серверами и блэкджеком на 10005000 тыщ онлайна, там есть аудио, видео, 3Д, юнити, яваскрипт, перл, пхп, пир2пир, видеочат и телемаркет. Почему переменная А класса chtoNiJama и переменная Б класса toKanava в сумме дают 3, хотя должны давать 2?

Цитата:
кто бы - кто бы мне помог?
Тут спасуют даже Вассерман с Ч.Норрисом....
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

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

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

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


 


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


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