![]() |
Как избежать разбивки кода по кадрам?
Здравствуйте дорогие флешеры.
Есть такой вопрос. У меня есть клип-таблица (некий массив объектов X*Y), который содержит внутри себя объекты-ячейки. Объекты-ячейки генерируются кодом в момент создания клип-таблицы. То есть, в клип-таблице изначально лежит одна скрытая ячейка, которая копируется через duplicateMovieClip(). Код копирования (создания) ячеек находится в первом кадре мувика таблицы. У каждой ячейки есть свое состояние. Необходимо сделать так, чтобы при создании новой таблицы, ячейкам этой таблицы устанавливались стартовые значения. Причем за установку этих состояний должен отвечать не код, принадлежащий таблице, а код, разположеный на более высоком уровне. То есть нужно создать конструктор для объекта "таблица", который будет создавать объект, и задавать дефолтное состояние его ячеек. Новый объект таблицы я создаю путем копирования существующего скрытого объекта таблицы, через ту же функцию duplicateMovieClip(). И тут возникает ПРОБЛЕМА. После создания (по сути - копирования) таблицы, я могу изменить свойства представляющего ее мувика. Например, могу установить, свойство _x или _y или прозрачность. Но я не могу установить свойства для под-объектов, то есть не могу установить нужные мне свойства для ячеек. Это происходит по той причине, что для того, чтобы ячейки создались, нужно "прощелкивание" кадра, так как они создаются программно в коде клипа таблицы. Таким образом, получается, что я не могу написать одним куском код в стиле Код:
for(i=0;i<tabs;i++)Код:
for(i=0;i<tabs;i++)Код:
for(i=0;i<tabs;i++)И именно поэтому я не могу оформить код в нормальный вид, не могу создать конструктор, с помощью которого буду создаваить новую таблицу через new logictab(); Вопрос - есть ли решение этой проблеммы? Как обычно поступают в таких ситуациях? Очень бы хотелось иметь правильный код, потому что с разорваным на кадры кодом очень неудобно управляться. Может быть, я изначально как-то не так проектирую объекты "таблица" и "ячейка"? ЗЫЖ В моем случае "таблица" и "ячейка" - это объекты, по своей сути далекие от понятий "таблица" и "ячейка". Я просто их так называю, чтобы внятно объяснить что мне нужно. По этой причине, использование компонета DataSet не предлагать. :) |
А обязательно проигрывать какую-то анимацию между созданием и дублированием (заполнением)? Я бы подумал над другим, более практичным решением.
В любом случае, если возможно создать еще один слой проигрывающийся оба кадра с одним и тем же кодом, то my_mc._currentframe в помощь. |
Цитата:
Код:
Главная сцена [Кадр 1: Создаем таблицу] [Кадр 2: Задаем свойства ячейкам]Цитата:
|
Цитата:
|
Потому что -
Цитата:
|
Вложений: 1
Я так и не понял весь ваш текст. Вот вам пример, может то что вы хотите.
|
2 Xintrea:
Самое простое и напрашивающееся решение - создать (програмно\в библиотеке) 1 экземпляр ячейки таблицы, обозвать его каким-нибудь классом (надавать всех нужных свойств и ф-ций) и потом загружать\дублировать его куда угодно, когда угодно и в произвольных колличествах. Привязывать к анимации есть смысл только если нужно ждать, что юзер просмотрит какой-то клип, после чего и должны создаться\заполнится ячейки. ЗЫ. для задания значения свойства вовсе не нужно использовать сетПроперти, достаточно "=" МойОъект.МоеСвойство = значение/ в некоторых случаях МойОъект["МоеСвойство"] = значение. ЗЫЫ. Что такое "лоджикТаб"? компонент/кастомный класс какой-нибудь? ЗЫЫЫ. дупликейтМуви не рекомендовано к использованию в принципе =) |
2 iNils
Сорри, не могу открыть этот table.fla. Судя по сигнатуре в table.swf, вы делали пример в 8-м флеше, а у миня старый добрый MX2004. |
Вложений: 1
Старый? добрый это flash mx, а не mx2004.
|
Вложений: 1
2 iNils
Спасибо за пример, я с ним поковырялся - у вас все работает как надо. Например, в первом кадре основной сцены, сразу после строки var mc = this._parent.attachMovie ("libTable", "mcTable" + this.tableCount, this.tableCount, o); я добавил такой код Код:
for (var j = 0; j < o.r; j++)В моем случае я сделал так же как у вас, но почему-то всеравно изменение свойств происходит только после перещелкивания кадра. Вот и не могу понять почему. Чтобы не быть голословным, прикладываю архив. Откройте *.fla файл и запустите его (Ctrl+Enter). Вы увидите, что ячейки таблички ровные (одинаковые). Это несмотря на то, что в коде присутствуют команды рандомного изменения масштаба ячеек. Откройте символ LBEditor, встаньте на слой ActionScript, кадр 1. Найдите поиском следующие строки Код:
// Проверка установки случайных размеров ячеекВопрос - почему так происходит? |
| Часовой пояс GMT +4, время: 15:55. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.