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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.03.2013, 00:21
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 11  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Спасибо мысль понятна, но в моём случае наверно это не пройдёт потому как особенно элементы третьего уровня могут менять свои индексы, вообще удаляться, добавляться новые. Это может вызвать такую чехарду, лучше уж перебором выходить на него, кликнутого и давать ему команды.

Старый 06.03.2013, 00:36
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 12  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
На самом деле, перебор - это не так страшно.

Старый 06.03.2013, 00:40
Vreden вне форума Посмотреть профиль Отправить личное сообщение для Vreden Найти все сообщения от Vreden
  № 13  
Ответить с цитированием
Vreden
 
Аватар для Vreden

Регистрация: Feb 2009
Сообщений: 141
Такие сложные массивы - плохо.
[0][3][2] - плохо. Как было сказано выше, лучше пересмотреть структуру данных и сделать для первого уровня массива [0] специальный тип, который описывает вложенные уровни [3][2]. И тогда у вас будет одномерный массив или вектор этих специальных типов. (Специальный тип может также описывать массив, который хранит специальный тип для следующего вложенного уровня и т.д.)

И принципы ООП соблюдены, и ежу понятен код будет, а при виде [0][3][2] я начинаю жутко нервничать

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

Регистрация: Feb 2013
Сообщений: 176
может деревья тут были бы выгоднее?

Старый 06.03.2013, 10:33
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 15  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Кстати, я так и не понял, а зачем вообще эти массивы.

Цитата:
Речь идёт о рисовании некоторых составных графических элеменов, которых можно несколько создать на одной плоскости, а плоскостей тоже может быть несколько. Данные по одному такому составному элементу - массив, описание всех элементов на одной плоскости - двумерный массив, а по всем плоскостям - трёхмерный.
Если плоскость - это контейнер, то для обхода всех элементов на плоскости не нужен массив, в котором все элементы зарегистрированы. Достаточно обойти всех детей контейнера.

Если же мы ткнули в конкретный элемент, то он всегда знает своего родителя и родителя своего родителя.

Старый 06.03.2013, 11:43
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 16  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Мысль хорошая, но я признаться мало работал именно с контейнерами, будем гуглить.

Старый 06.03.2013, 12:30
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 17  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
но я признаться мало работал именно с контейнерами

Код AS3:
 
var panelContainer:Sprite = new Sprite(); // это контейнер
 
var element1:Element = new Element(); // это элемент
var element2:Element = new Element();
var element3:Element = new Element();
 
panelContainer.addChild(element1);
panelContainer.addChild(element2);
panelContainer.addChild(element3);
 
for(var i:int = 0; i < panelContainer.numChildren; i++)
{
  if (panelContainer.getChildAt(i) as Element)
  {
    var element:Element = panelContainer.getChildAt(i) as Element; 
    // тут делаем с элементом, что нужно
 
    trace(element, element.parent, element.parent.parent); 
  }
}

Старый 06.03.2013, 12:36
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 18  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Спасибо, ситуация проясняется.

Добавлено через 22 часа 26 минут
Второй день бьюсь и понимаю что мало что проясняется, проблема не в понимании сути, а в незнании синтаксиса AS3. С одномерным контейнером все понятно, положил-выложил, делов-то! Требуется чёткое понимание принципа создания контейнеров разного уровня ну и управления ими: создал, добавил, удалил.
Вот примерно что требуется от предыдущего кода:
Код AS3:
var panelContainer:Sprite = new Sprite(); // это контейнер
var element1:Sprite = new Sprite(); // это элемент
var element2:Sprite = new Sprite();
var element3:Sprite = new Sprite();
 
panelContainer.addChild(element1);
panelContainer.addChild(element2);
panelContainer.addChild(element3);
/* В контейнер panelContainer добавлено три потомка element1,2,3 теперь стоит задача добавить в эти потомки ещё объекты а потом в свою очередь добавить потомки в них */
/* Следующие элементы добавляются как дети в добавленные в panelContainer element1,2,3 */
var element1a:Sprite = new Sprite();
var element2a:Sprite = new Sprite();
var element3a:Sprite = new Sprite();
/* После всего этого добавить еще потомков по пути panelContainer->element1->element1a->element1a1 */
var element1a1:Sprite = new Sprite();
var element2a1:Sprite = new Sprite();
var element3a1:Sprite = new Sprite();
/* А так же хотелось бы понять как можно легко и непринуждённо управлять ими. */
for(var i:int = 0; i < panelContainer.numChildren; i++)
{
  if (panelContainer.childAt(i) as Sprite)
  {
    var element:Sprite = panelContainer.getChildAt(i) as Sprite; 
    // тут делаем с элементом, что нужно
 
    trace(element.name, element.parent, element.parent.parent, element.parent.parent.perent); 
  }
}
Если у кого-то есть ссылка на урок по синтаксису на похожую задачу - скиньте плиз.

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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