![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
Здравствуйте дорогие флешеры.
Есть такой вопрос. У меня есть клип-таблица (некий массив объектов X*Y), который содержит внутри себя объекты-ячейки. Объекты-ячейки генерируются кодом в момент создания клип-таблицы. То есть, в клип-таблице изначально лежит одна скрытая ячейка, которая копируется через duplicateMovieClip(). Код копирования (создания) ячеек находится в первом кадре мувика таблицы. У каждой ячейки есть свое состояние. Необходимо сделать так, чтобы при создании новой таблицы, ячейкам этой таблицы устанавливались стартовые значения. Причем за установку этих состояний должен отвечать не код, принадлежащий таблице, а код, разположеный на более высоком уровне. То есть нужно создать конструктор для объекта "таблица", который будет создавать объект, и задавать дефолтное состояние его ячеек. Новый объект таблицы я создаю путем копирования существующего скрытого объекта таблицы, через ту же функцию duplicateMovieClip(). И тут возникает ПРОБЛЕМА. После создания (по сути - копирования) таблицы, я могу изменить свойства представляющего ее мувика. Например, могу установить, свойство _x или _y или прозрачность. Но я не могу установить свойства для под-объектов, то есть не могу установить нужные мне свойства для ячеек. Это происходит по той причине, что для того, чтобы ячейки создались, нужно "прощелкивание" кадра, так как они создаются программно в коде клипа таблицы. Таким образом, получается, что я не могу написать одним куском код в стиле for(i=0;i<tabs;i++)
{
// Создается таблица
duplicateMovieClip("logictab","logictab_"+i,startlayer+i);
setProperty("logictab_"+i, _x, shiftx+i*stepx);
setProperty("logictab_"+i, _y, shifty);
// Задаются свойства для ячеек
for (y=0; y<9; y++)
for (x=0; x<9; x++)
set("logictab_"+i+".cell"+x+y+".cell_state", glob_default[x][y]);
}
for(i=0;i<tabs;i++)
{
// Создается таблица
duplicateMovieClip("logictab","logictab_"+i,startlayer+i);
setProperty("logictab_"+i, _x, shiftx+i*stepx);
setProperty("logictab_"+i, _y, shifty);
}
for(i=0;i<tabs;i++)
{
// Задаются свойства для ячеек
for (y=0; y<9; y++)
for (x=0; x<9; x++)
set("logictab_"+i+".cell"+x+y+".cell_state", glob_default[x][y]);
}
И именно поэтому я не могу оформить код в нормальный вид, не могу создать конструктор, с помощью которого буду создаваить новую таблицу через new logictab(); Вопрос - есть ли решение этой проблеммы? Как обычно поступают в таких ситуациях? Очень бы хотелось иметь правильный код, потому что с разорваным на кадры кодом очень неудобно управляться. Может быть, я изначально как-то не так проектирую объекты "таблица" и "ячейка"? ЗЫЖ В моем случае "таблица" и "ячейка" - это объекты, по своей сути далекие от понятий "таблица" и "ячейка". Я просто их так называю, чтобы внятно объяснить что мне нужно. По этой причине, использование компонета DataSet не предлагать. ![]() |
|
|||||
|
Modus ponens
|
А обязательно проигрывать какую-то анимацию между созданием и дублированием (заполнением)? Я бы подумал над другим, более практичным решением.
В любом случае, если возможно создать еще один слой проигрывающийся оба кадра с одним и тем же кодом, то my_mc._currentframe в помощь.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
Цитата:
Главная сцена [Кадр 1: Создаем таблицу] [Кадр 2: Задаем свойства ячейкам]
|
V
Таблица [Кадр 1: Генерируем ячейки]
|
V
Ячейка
Цитата:
Последний раз редактировалось xintrea; 31.07.2006 в 14:15. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Цитата:
|
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
Потому что -
Цитата:
|
|
|||||
|
Modus ponens
|
2 Xintrea:
Самое простое и напрашивающееся решение - создать (програмно\в библиотеке) 1 экземпляр ячейки таблицы, обозвать его каким-нибудь классом (надавать всех нужных свойств и ф-ций) и потом загружать\дублировать его куда угодно, когда угодно и в произвольных колличествах. Привязывать к анимации есть смысл только если нужно ждать, что юзер просмотрит какой-то клип, после чего и должны создаться\заполнится ячейки. ЗЫ. для задания значения свойства вовсе не нужно использовать сетПроперти, достаточно "=" МойОъект.МоеСвойство = значение/ в некоторых случаях МойОъект["МоеСвойство"] = значение. ЗЫЫ. Что такое "лоджикТаб"? компонент/кастомный класс какой-нибудь? ЗЫЫЫ. дупликейтМуви не рекомендовано к использованию в принципе =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 31.07.2006 в 21:50. |
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
2 iNils
Сорри, не могу открыть этот table.fla. Судя по сигнатуре в table.swf, вы делали пример в 8-м флеше, а у миня старый добрый MX2004. |
|
|||||
|
Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
|
2 iNils
Спасибо за пример, я с ним поковырялся - у вас все работает как надо. Например, в первом кадре основной сцены, сразу после строки var mc = this._parent.attachMovie ("libTable", "mcTable" + this.tableCount, this.tableCount, o); я добавил такой код for (var j = 0; j < o.r; j++)
for (var i = 0; i < o.c; i++)
{
id = o.c * j + i;
set("mcTable"+this.tableCount+".mcCell"+id+"._xscale",random(100)+100);
set("mcTable"+this.tableCount+".mcCell"+id+"._yscale",random(100)+100);
}
В моем случае я сделал так же как у вас, но почему-то всеравно изменение свойств происходит только после перещелкивания кадра. Вот и не могу понять почему. Чтобы не быть голословным, прикладываю архив. Откройте *.fla файл и запустите его (Ctrl+Enter). Вы увидите, что ячейки таблички ровные (одинаковые). Это несмотря на то, что в коде присутствуют команды рандомного изменения масштаба ячеек. Откройте символ LBEditor, встаньте на слой ActionScript, кадр 1. Найдите поиском следующие строки и закомментируйте вызов функции lbe_set_logictab_scale(). А в кадре 2 раскомментируйте вызов этой функции. Запустите. Вы увидите, что ячейки стали разного размера. Вопрос - почему так происходит? Последний раз редактировалось xintrea; 02.08.2006 в 16:38. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|