xintrea
31.07.2006, 02:31
Здравствуйте дорогие флешеры.
Есть такой вопрос. У меня есть клип-таблица (некий массив объектов 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 не предлагать. :)
Есть такой вопрос. У меня есть клип-таблица (некий массив объектов 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 не предлагать. :)