PDA

Просмотр полной версии : Динамическая генерация кнопок


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
Интересно, как Вы так поняли? =)
Все есть
Самое простое: пишите функцию

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

а затем назначаете её обработчиком события

my_butt.onRelease = shaut

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

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

nOobCrafter
11.02.2009, 15:18
Вот для примера кинул код, где мы дублируем кнопки и присваиваем им действия в цикле:
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
Ага, оно.Спасибо, вроде понял.