Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Динамическая генерация кнопок (http://www.flasher.ru/forum/showthread.php?t=121232)

Grumble 10.02.2009 22:54

Динамическая генерация кнопок
 
Привет всем,
Просьба не бить ногами-только разбираюсь в AS.. Вообщем вот задачка: сделал я кнопку на сцене, через AS привязал к ней функцию обработчик, которая при вызове (то бишь нажатии) запускает проигрывание определенного flash ролика на другой сцене. Всё работает.
Теперь задача сделать так, чтобы на сцене было много таких кнопок, а имя ролика привязанного к конкретной кнопке лежит в файле на сервере, и в общем случае этот файл может меняться (его содержимое). Вот вопрос в том, как можно в автомате - то бишь не руками налету лезть в файл на сервере считывать из него список swf файлов, и на сцене налету генерировать для каждого swf кнопку, которая будет его запускать на отдельной сцене?? Хоть куда копать подскажите, а то я не знаю с какой стороны подойти:)

gloomyBrain 10.02.2009 23:02

в сторону классов XML и LoadVars
С их помощью Вы сможете обратиться к серверу и получить нужные данные в удобном для Вас формате (LoadVars - строка вида имя=значение&имя2=значение2, а XML - он и есть XML =) - полноценный документ со своей структурой, которую просто обрабатывать)

Grumble 10.02.2009 23:18

Ок.Спасибо,с этим понятно где копаться. А насчёт динамической привязки функции к созданному программно экземпляру символа? Я так понял, что никаких аналогов Сишных указателей или делегатов нету, значит что-то другое должно быть для этих целей..:umnik2:

gloomyBrain 11.02.2009 01:05

Интересно, как Вы так поняли? =)
Все есть
Самое простое: пишите функцию
Код AS1/AS2:

function shaut(){
trace("I was pressed!!!")
}

а затем назначаете её обработчиком события
Код AS1/AS2:

my_butt.onRelease = shaut

Ну это не есть конечно истина в последней инстанции, но принцип, я думаю, понятен
Кнопки можно создавать, например в цикле, и прямо в цикле задавать им обработчики.

Grumble 11.02.2009 14:42

Цитата:

Ну это не есть конечно истина в последней инстанции, но принцип, я думаю, понятен
Кнопки можно создавать, например в цикле, и прямо в цикле задавать им обработчики.
Это понятно, вопрос в том как налету создавать функции-обработчики? Я в цикле генерю экземпляры N символов, это ясно. А как создавать экземпляр функций со своим именем и содержанием? То есть общий шаблон функций один, но в зависимости от инфы в xml файле будут нюансы. Непонятно как во время исполнения программы создавать функции..:confused:

nOobCrafter 11.02.2009 15:18

Вот для примера кинул код, где мы дублируем кнопки и присваиваем им действия в цикле:
Код AS1/AS2:

for( i = 0; i < total; i++)
        {
                var Soft_Download_item = fm_item.duplicateMovieClip("fm_item"+i, i); // вводим переменную для простоты обращения
                Soft_Download_item._y = i * (fm_item._height + 4);
                Soft_Download_item.Soft_Download_item_title.text = Soft_Download_item_title[i]; // Soft_Download_item_title = массив хранящий текст
                Soft_Download_item.no = i; // запоминаем номер для дальнейшего обращения, к кнопке и  элементам массивов
 
                Soft_Download_item.onRelease = function()
                {
                        getURL(Soft_Download_item_url[this.no], '_self' ); // Soft_Download_item_url = массив ссылок
                }
}

При обращении к кнопке мы привязываем ей определенные элемент массива с таким же номером как у кнопки (для простоты),
например есть 5 кнопок, и есть массив с названиями 5ти элементов, в нашем случае мы первой кнопке присваиваем первый элемент массива, второй - второй и т.д.

Grumble 15.02.2009 20:11

Ага, оно.Спасибо, вроде понял.


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

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