Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 31.07.2006, 02:31
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 1  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: 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 не предлагать.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 31.07.2006, 08:31
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А обязательно проигрывать какую-то анимацию между созданием и дублированием (заполнением)? Я бы подумал над другим, более практичным решением.
В любом случае, если возможно создать еще один слой проигрывающийся оба кадра с одним и тем же кодом, то my_mc._currentframe в помощь.
__________________
Hell is the possibility of sanity

Старый 31.07.2006, 14:02
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 3  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Цитата:
Сообщение от wvxvw
А обязательно проигрывать какую-то анимацию между созданием и дублированием (заполнением)? Я бы подумал над другим, более практичным решением.
Так я и не хочу проигрывать анимацию между созданием и дублированием (заполнением). Но не могу без этого обойтись.

Код:
Главная сцена [Кадр 1: Создаем таблицу] [Кадр 2: Задаем свойства ячейкам]

   |
   V

   Таблица [Кадр 1: Генерируем ячейки]

       |
       V

       Ячейка
В Таблице в первом кадре расположен код генерации ячеек. Таким образом, создать в Главной сцене Таблицу, и сразу задать состояния ячеек - не получается. Это из-за того, что сразу после создания Таблицы, Таблица еще не наполнена Ячейками. А чтобы она наполнилась, нужно прощелкнуть кадр. В момент прощелкивания выполнится код из первого кадра Таблицы, следовательно появятся Ячейки. И вот после этого можно задавать свойства этим Ячейкам.


Цитата:
Сообщение от wvxvw
В любом случае, если возможно создать еще один слой проигрывающийся оба кадра с одним и тем же кодом, то my_mc._currentframe в помощь.
Не, это будет шаткий код. Так нельзя. Думаю, что-то надо менять в мой моделе "Таблица-Ячейки", тока не могу понять как, чтобы и код лежал в нужных местах (первый кадр таблицы - самое правильное место для генерации массива ячеек), и управление таким объектом шло без извращений в стиле разбивки кода по кадрам.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru


Последний раз редактировалось xintrea; 31.07.2006 в 14:15.
Старый 31.07.2006, 15:19
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от xintrea
В Таблице в первом кадре расположен код генерации ячеек. Таким образом, создать в Главной сцене Таблицу, и сразу задать состояния ячеек - не получается.
Почему?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 31.07.2006, 16:45
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 5  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
Потому что -

Цитата:
Новый объект таблицы я создаю путем копирования существующего скрытого объекта таблицы, через функцию duplicateMovieClip(). И тут возникает ПРОБЛЕМА. После создания (по сути - копирования) таблицы, я могу изменить свойства представляющего ее мувика. Например, могу установить, свойство _x или _y или прозрачность.

Но я не могу установить свойства для под-объектов, то есть не могу установить нужные мне свойства для ячеек. Это происходит по той причине, что для того, чтобы ячейки создались, нужно "прощелкивание" кадра, так как они создаются программно в коде клипа таблицы (в первом кадре таблицы).

Таким образом, я не могу написать одним куском код.
Либо так флеш устроен, либо я что-то не так делаю. Если это я не так делаю, хочу узнать как правильно. Если это флеш так устроен, хочу узнать как правильно делать "генерацию объектов с инитом генерирующихся под-объектов" в рамках флеш MX 2004.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 31.07.2006, 18:08
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Я так и не понял весь ваш текст. Вот вам пример, может то что вы хотите.
Вложения
Тип файла: zip table.zip (10.5 Кб, 20 просмотров)
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 31.07.2006, 21:42
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
2 Xintrea:
Самое простое и напрашивающееся решение - создать (програмно\в библиотеке) 1 экземпляр ячейки таблицы, обозвать его каким-нибудь классом (надавать всех нужных свойств и ф-ций) и потом загружать\дублировать его куда угодно, когда угодно и в произвольных колличествах.
Привязывать к анимации есть смысл только если нужно ждать, что юзер просмотрит какой-то клип, после чего и должны создаться\заполнится ячейки.

ЗЫ. для задания значения свойства вовсе не нужно использовать сетПроперти, достаточно "=" МойОъект.МоеСвойство = значение/ в некоторых случаях МойОъект["МоеСвойство"] = значение.
ЗЫЫ. Что такое "лоджикТаб"? компонент/кастомный класс какой-нибудь?
ЗЫЫЫ. дупликейтМуви не рекомендовано к использованию в принципе =)
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 31.07.2006 в 21:50.
Старый 31.07.2006, 22:25
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 8  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: Mar 2002
Адрес: https://webhamster.ru
Сообщений: 107
2 iNils

Сорри, не могу открыть этот table.fla. Судя по сигнатуре в table.swf, вы делали пример в 8-м флеше, а у миня старый добрый MX2004.
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru

Старый 31.07.2006, 22:29
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Старый? добрый это flash mx, а не mx2004.
Вложения
Тип файла: zip table7.zip (11.1 Кб, 16 просмотров)
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 02.08.2006, 02:38
xintrea вне форума Посмотреть профиль Отправить личное сообщение для xintrea Посетить домашнюю страницу xintrea Найти все сообщения от xintrea
  № 10  
Ответить с цитированием
xintrea
 
Аватар для xintrea

Регистрация: 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(lbe_curr_ftb);
и закомментируйте вызов функции lbe_set_logictab_scale(). А в кадре 2 раскомментируйте вызов этой функции. Запустите. Вы увидите, что ячейки стали разного размера.

Вопрос - почему так происходит?
Вложения
Тип файла: rar vopros.rar (49.0 Кб, 45 просмотров)
__________________
Со всяческими пожеланиями, Xintrea.
https://webhamster.ru


Последний раз редактировалось xintrea; 02.08.2006 в 16:38.
Создать новую тему Ответ Часовой пояс GMT +4, время: 18:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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