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

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

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

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Для вышеприведенного XML загрузка и парсинг:
Код AS1/AS2:
var configXmlPath:String = '';//URL конфигурационного XML
var xmlData:XML = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load(configXmlPath);
 
function loadXML (success:Boolean)
{
	if (success)
	{
		var xmlNode:XMLNode = this.firstChild ; //для сокращения записи
		var amountMenu:Number = xmlNode.childNodes.length ;
 
		for (i = 0; i < amountMenu; i++)
		{
			var menuId:Number = parseInt(xmlNode.childNodes[i].attributes['id']);
			var menuName:Number = xmlNode.childNodes[i].attributes['name'];
 
			var amountSubmenu:Number = xmlNode.childNodes[i].childNodes.length ;
 
			for (j = 0; j < amountSubmenu; j++)
			{
				var submenuId:Number = parseInt(xmlNode.childNodes[i].childNodes[j].attributes['id']);
				var submenuName:Number = xmlNode.childNodes[i].childNodes[j].attributes['name'];				
			}
		}
	}
}
1. Получение атрибутов url уж сами по аналогии.
2. Что и когда делать с полученными данными - тоже на ваше усмотрение: можно в цикле загонять в многомерные массивы для последующего использования (правда это тоже избыточно, ведь экземпляр XML с полученными данными - это тоже своего рода массив, по ходу прямо его и использовать), а можно тут же и использовать даннные, в процессе парсинга.
3. parseInt для id - ну это чтобы как-то вычислять можно было, например, или для удобства создания и использования многомерного массива, чтобы по номерным индексам обращаться к элементам, причем эти индексы были бы равны id. Факультативно, можете убрать это приведение к числу.
4. Запись вида attributes['name'] - я так привык просто, строковое имя атрибута выделяется лучше в редакторе кода.
__________________
Идите первым!


Последний раз редактировалось mooncar; 10.06.2011 в 12:49.
Старый 14.06.2011, 14:29
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 12  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
Всем привет. Спасибо за помощь. Благодаря вам кое что начинает получаться.

Код AS1/AS2:
xn=162; //Начальные координаты меню по X
yn=210; //Начальные координаты меню по Y
xrast=78; //расстояние между пунктами меню по X
yrast=15; ////расстояние между пунктами меню по Y
 
var configXmlPath:String = 'menu_horizontal.xml';//URL конфигурационного XML
var xmlData:XML = new XML(); //Создаем переменную
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load(configXmlPath);
 
function loadXML (success:Boolean){
	if (success){
		var xmlNode:XMLNode = this.firstChild ; //для сокращения записи
 
		//Переменная колличества пунктов меню
		var amountMenu:Number = xmlNode.childNodes.length;
 
		for (i = 0; i < amountMenu; i++){
			//Считываем ID для подменю
			var MenuId:Number = parseInt(xmlNode.childNodes[i].attributes['id']);
			//Считываем Url для меню 
			var MenuUrl:Number = xmlNode.childNodes[i].attributes['url']; 
			//Считываем Имя для меню 
			var MenuName:Number = xmlNode.childNodes[i].attributes['name']; 
 			 //Прикрепляем мувик Меню из библиотеки
			_root.attachMovie("Menu","Menu"+MenuId,MenuId);
                        //Задаем координаты по x и y для мувика
			_root["Menu"+MenuId]._x = xn+xrast*MenuId;
			_root["Menu"+MenuId]._y = yn;
                       //Загружаем переменные Имя Меню и Url
			_root["Menu"+MenuId].txt_menu = MenuName;
			_root["Menu"+MenuId].url_menu = MenuUrl;
 
				//Переменная колличества пунктов подменю
				var amountSubmenu:Number = xmlNode.childNodes[i].childNodes.length;
 
				for (j = 0; j < amountSubmenu; j++)	{
				//Считываем ID для подменю
				var SubmenuId:Number = parseInt(xmlNode.childNodes[i].childNodes[j].attributes['id']); 
				//Считываем Url для подменю
				var SubmenuUrl:Number = xmlNode.childNodes[i].childNodes[j].attributes['url']; 
				//Считываем Имя для подменю
				var SubmenuName:Number = xmlNode.childNodes[i].childNodes[j].attributes['name']; 
				//Прикрепляем мувик Подменю из библиотеки
				_root["Menu"+MenuId].attachMovie("SubMenu","SubMenu"+SubmenuId,SubmenuId); 
                                //Задаем координаты по x и y для мувика
				_root["Menu"+MenuId]["SubMenu"+SubmenuId]._x = 0;
				_root["Menu"+MenuId]["SubMenu"+SubmenuId]._y = _root["Menu"+MenuId]._y/yn+15+yrast*SubmenuId;
                                //Загружаем переменные Имя Подменю и Url
				_root["Menu"+MenuId]["SubMenu"+SubmenuId].url_submenu = SubmenuUrl;
				_root["Menu"+MenuId]["SubMenu"+SubmenuId].txt_submenu = SubmenuName;
			}
		}
	}
}
Меню распарсинговано и приаттачено, теперь хочу сделать чтоб соответствующие пункты подменю раскрывались и скрывалось при подводе мыши к основным пунктам меню. Хочу спросить совета, как лучше это сделать.

Думаю сделать это так.
Способ 1. Аттачить мувики Подменюшек в отдельный мувик (например в какой-нибудь listSubMenu) расположенный в мувике пунктов Меню, который по умолчанию будет скрыт (_visible=false) а потом на пункт Меню повесить:
Код AS1/AS2:
onRelease = function() {
listSubMenu._visible=true.
}
Способ 2. Писать условие для каждого из главных пунктов меню, чтото типа
Код AS1/AS2:
 if (MenuId=="0"){
_root["Menu"+MenuId].onRollOver = function() {
listSubMenu.gotoAndPress(1); //отображаем подменю для Меню 0
};
 if (MenuId=="1"){
_root["Menu"+MenuId].onRollOver = function() {
listSubMenu.gotoAndPress(2); //отображаем подменю для Меню 1
};
 
//и т.д.
Подскажите как будет правильнее.
Вот ссылка на текущий исходник.menu


Последний раз редактировалось vivado; 14.06.2011 в 14:51.
Старый 14.06.2011, 15:32
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 13  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Спрашивать "как лучше" - не имеет ровно никакого смысла. Ибо вам тут сейчас предложат 100 вариантов и вы утонете во вводных.
Надо просто сесть и делать. На это может уйти час, день, неделя, месяц.
В любом случае чужой опыт Вам не пригодится.
Каждый сам, лично должен наступить на все грабли, чтобы ориентироваться в процессе в дальнейшем.
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 14.06.2011, 16:01
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 14  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
Цитата:
Сообщение от dark256 Посмотреть сообщение
Спрашивать "как лучше" - не имеет ровно никакого смысла. Ибо вам тут сейчас предложат 100 вариантов и вы утонете во вводных.
Надо просто сесть и делать. На это может уйти час, день, неделя, месяц.
В любом случае чужой опыт Вам не пригодится.
Каждый сам, лично должен наступить на все грабли, чтобы ориентироваться в процессе в дальнейшем.
Используя предложенные грабли и понабив шишек кое как написал код для правильного отображения/скрытия подпунктов меню. Единственное, что меня огорчает я так и не смог написать весь код в одном кадре, пришлось ставить код на мувики, ну никак не хотел он работать иначе ((( Ну это небольшое отступление от темы.

Задача 1 решена, меню парсится из xml и все данные грузятся. Приступил к тому о чем собственно тема, к созданию вертикального разъезжающегося меню (а ля аккордеон). Мучаюсь над написанием функции которая будет "раздвигать" менюшки. Сново взываю о помощи )))

Итак я вижу это так в функцию должны передаваться
1. Имя "активного" меню
2. Кол-во пунктов подменю этого меню (чтоб знать на сколько опустить/поднять ниже расположенные пункты меню

Добавлено через 23 часа 23 минуты
Сломал мозг слегка но что то родилось, правда опять как то криво работает (((
Код AS1/AS2:
function SlideMenu(NumSelectedMenu,NumPodmenu){ //Раздвигает пункты меню
NumPodmenu=NumPodmenu/3; //Так надо не обращайте внимания )))
 
trace("Номер выбранного меню "+NumSelectedMenu+" в нем подменю "+NumPodmenu+" Всего пунктов меню "+PunktovMenuVsego);
hpodmenu=20; //высота пункта подменю
 
if (NumSelectedMenu<PunktovMenuVsego){ //Если Номер выбранной менюшки меньше чем всего менюшек 
	MoveMenuStart = NumSelectedMenu; //Первое меню под активным
	_root["Menu"+MoveMenuStart]._y=NumPodmenu*hpodmenu; //Сдвигаем вниз первое меню под активным
	trace ("Опускаем Menu "+MoveMenuStart);
}
OtherDownMenu=MoveMenuStart+1;
for ( r = OtherDownMenu; OtherDownMenu<PunktovMenuVsego; r++){
	//Опускаем остальные менюшки
	i++;
	_root["Menu"+r]._y=_root["Menu"+MoveMenuStart]._y+hpodmenu*i; 
	trace ("Опускаем Menu "+OtherDownMenu);
	OtherDownMenu++; //к следующей менюшке
 
}
}
Гляньте что не так пожааалуста...
Вот исходник Меню


Последний раз редактировалось vivado; 15.06.2011 в 16:03.
Старый 15.06.2011, 16:11
Nina вне форума Посмотреть профиль Отправить личное сообщение для Nina Найти все сообщения от Nina
  № 15  
Ответить с цитированием
Nina

Регистрация: Jun 2011
Сообщений: 1
А зачем вводить переменную?
Код AS1/AS2:
MoveMenuStart = NumSelectedMenu; //Первое меню под активным

Старый 16.06.2011, 13:03
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 16  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
Цитата:
Сообщение от Nina Посмотреть сообщение
А зачем вводить переменную?
Код AS1/AS2:
MoveMenuStart = NumSelectedMenu; //Первое меню под активным
Ну да чето я лишнего понаписал )))
Вот так будет лучше.

Код AS1/AS2:
function SlideMenu(NumSelectedMenu,NumPodmenu){ //Раздвигает пункты меню
NumPodmenu=NumPodmenu/3; //Так надо не обращайте внимания )))
 
trace("Номер выбранного меню "+NumSelectedMenu+" в нем подменю "+NumPodmenu+" Всего пунктов меню "+PunktovMenuVsego);
hpodmenu=23; //высота пункта подменю
 
MoveMenuStart = NumSelectedMenu+1; //Первое меню под активным
//OtherDownMenu=MoveMenuStart+1;
for ( r = MoveMenuStart; r<PunktovMenuVsego; r++){
	//Опускаем остальные менюшки
	_root["Menu"+r]._y=_root["Menu"+NumSelectedMenu]._y+hpodmenu*i; 
	trace ("Опускаем Menu "+r);
	i++;
}
}
Теперь нужно придумать как обратно менюшки возвращать при отведении мышки. Наверное нужно переменную для предыдущей активной менюшки ввести и отслеживать ее координаты. Блин как все запущено (((

Добавлено через 2 часа 19 минут
УРА У МЕНЯ ВСЕ ПОЛУЧИЛОСЬ!
Вертикальное и горизонтальное XML меню на AS 2.0 готово!
МОжет конечно код кривоват + кое-где он размещен на мувиках (знаю, знаю, что это плохо,
но не смог сделать по другому) но в конце концов все работает и я счастлив )))
Выкладываю работающие исходники, может кому пригодится.

Горизонтальное и вертикальное XML меню


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

Теги
xml аккордион , xml меню , аккордион меню , раскрывающееся меню

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

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


 


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


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