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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.05.2011, 20:08
puchokstar вне форума Посмотреть профиль Отправить личное сообщение для puchokstar Найти все сообщения от puchokstar
  № 1  
Ответить с цитированием
puchokstar

Регистрация: May 2011
Сообщений: 3
Question Проблема с отображением детей.

Доброго времени суток.

Уже второй день подряд бьюсь, все никак решение не придумаю.

Нужно нарисовать куб, а потом при нажатии, допустим, на кнопку, сделать так, чтобы он сдвинулся, например, на право на 100 пикселей. Пользую Canvas, но рисовать сразу на нем не могу, потому что не знаю как получить доступ к нему из другого пакета. Отдельный пакет использую потому что в нем у меня класс с аффинными преобразованиями объектов и я не хочу, чтобы весь код был в mxml... Поэтому я добавляю на Canvas методом .addChild() UIComponent , который и содержит куб.

Проблема в том, что когда я пытаюсь перерисовать свой куб, я удаляю у Canvas ранее добавленного ребенка (Canvas очищается), но при добавлении НОВОГО (с измененными координатами) у меня по какой-то причине отображается и предыдущий. Причем, если еще раз попробовать сдвинуть куб, то уже будет 3 куба, еще раз - 4 куба и т.д. Сам Canvas проверял, у него ребенок действительно удаляется. Где-то все равно остается инфа о предыдущих детях, которые я добавлял (наверное), но где -никак не пойму....

Вот тут ссылка на результат одного нажатия на кнопку "сдвинуть"
http://imglink.ru/show-image.php?id=...2870918a1f3133

Я думаю весь код кидать нет смысла, поэтому вот только те части методов с которыми проблемы. ar - это экземпляр моего класса - с ним все должно быть хорошо.

Код AS3:
              <mx:Canvas width="392" height="446" backgroundColor="#FFFFFF" id="drawSpace" y="10" click="moveShape()" x="124"/>
 
              // метод, который изначально отображает куб. 
               private function drawBox():void{	       
 
	       var c:UIComponent = new UIComponent();
	       c.addChild(ar.getShape());
	       drawSpace.addChild(c);
	    }
 
	      // вызывается по кнопке двинуть куб.
               private function moveShape():void{
			ar.move(100,0);
			var c:UIComponent = new UIComponent();
			c.addChild(ar.getShape());
			drawSpace.removeAllChildren();
			drawSpace.addChild(c);
		}
Заранее ОГРОМНОЕ спасибо. ) Уж очень я намучился с этим. Сразу предупреждаю, что до этого c AS никогда не связывался, поэтому любые советы как и на чем рисовать выслушаю с удовольствием. )

Старый 08.05.2011, 11:19
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Что вот тут?
Код AS3:
ar.getShape()
Цитата:
Пользую Canvas, но рисовать сразу на нем не могу, потому что не знаю как получить доступ к нему из другого пакета.
Цитата:
Отдельный пакет использую потому что в нем у меня класс с аффинными преобразованиями объектов и я не хочу, чтобы весь код был в mxml...
При чем тут вообще пакеты? Не хотите в mxml — не пишите, в чем проблема?

Старый 09.05.2011, 03:01
puchokstar вне форума Посмотреть профиль Отправить личное сообщение для puchokstar Найти все сообщения от puchokstar
  № 3  
Ответить с цитированием
puchokstar

Регистрация: May 2011
Сообщений: 3
Здравствуйте, Alatar.

ar.getShape() - возвращает объект типа Shape. У меня в отдельном классе этот объект отрисовывается. Там мои методы обычных аффинных преобразований над объектом в пространстве и его проецирования на плоскость. Если имеет смысл, могу кинуть код, однако, думаю, что это к многоразовому отображению не относится.

Цитата:
При чем тут вообще пакеты? Не хотите в mxml — не пишите, в чем проблема?
У меня желание отделить всю работу с координатами объекта в отдельный класс. Я поначалу пытался создать новый файл со своим классом прямо в корне src, рядом с .mxml файлом, но среда почему-то ругалось. Далее я прочитал, если не ошибаюсь, на оф сайте хелпа по flex у adobe, что надо создавать свои классы в отдельном пакете (папке), что я, по сути, и сделал. В src у меня файл .mxml и папка с моим классом.

Цитата:
Пользую Canvas, но рисовать сразу на нем не могу, потому что не знаю как получить доступ к нему из другого пакета.
Если бы была возможность получить доступ из созданного мною класса к Canvas в файле .mxml, то я бы сразу на этом Канвесе и рисовал бы, а потом очищал canvas.graphics.clear(); думаю, что в этом случае у меня бы проблем с детьми точно не было бы...

Цитата:
Не хотите в mxml — не пишите, в чем проблема?
Можно не использовать .mxml? А где будет храниться инфа об элементах формы? =) Честно говоря, думал, что без кода в этом файле нельзя...

Спасибо большое, за ответ. )

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Если имеет смысл, могу кинуть код, однако, думаю, что это к многоразовому отображению не относится.
Скорее всего ошибка там.
Цитата:
Далее я прочитал, если не ошибаюсь, на оф сайте хелпа по flex у adobe, что надо создавать свои классы в отдельном пакете (папке), что я, по сути, и сделал. В src у меня файл .mxml и папка с моим классом.
Вы путаете теплое с мягким. Да, свои классы принято организовывать в пакеты, но это не имеет отношения к тому, что вы не смогли нарисовать на Canvas.
Цитата:
Можно не использовать .mxml? А где будет храниться инфа об элементах формы? =)
ActionScript вам в голову не приходил?
Цитата:
Если бы была возможность получить доступ из созданного мною класса к Canvas в файле .mxml, то я бы сразу на этом Канвесе и рисовал бы, а потом очищал canvas.graphics.clear(); думаю, что в этом случае у меня бы проблем с детьми точно не было бы...
Canvas в данном случае вообще не нужен. Сделайте компонент, на основе UIComponent и рисуйте в нем. Преобразования можно оформить в виде утилиты.

Старый 13.05.2011, 05:12
puchokstar вне форума Посмотреть профиль Отправить личное сообщение для puchokstar Найти все сообщения от puchokstar
  № 5  
Ответить с цитированием
puchokstar

Регистрация: May 2011
Сообщений: 3
Спасибо за ответ.

Извините, что так долго отвечал - учеба не давала возможности расслабиться и перепроверить код на всякий случай - ошибку так и не нашел. А главное, я даже гипотетически не могу представить, что там может обрабатываться не так.

И через приблизительно 40 минут после вышенаписанных слов все-таки нашел проблему с отображением. Как вы правильно заметили - ошибка именно в моем коде класса с преобразованиями, а отнюдь не с детьми... По своей невнимательности, совсем не заметил, что хотя я меняю координаты фигуры в пространстве и потом отрисовываю фигуру на Shape, не очищаю Shape после каждом сдвиге или повороте фигуры......

Цитата:
ActionScript вам в голову не приходил?
Честное слово - не стараюсь глупить. Если бы вы не сказали, я бы и не полез в очередной учебник по АS и не убедился, что можно создвать AS проект. Меня правда очень смутило, что нельзя пользоваться Дизайнером для разработки интерфейса.

Цитата:
Canvas в данном случае вообще не нужен. Сделайте компонент, на основе UIComponent и рисуйте в нем. Преобразования можно оформить в виде утилиты.
Если вас не затруднит, подскажите, пожалуйста, что значит "сделать компонент, на основе UIComponent"? Ну и что значит "оформить в виде утилиты"? Возможно, есть смысл по ЛС ответить, так как эту тему можно закрыть.

Так или иначе, в любом случае спасибо, что ответили - никогда еще так долго не мучился с одной проблемой в коде... )

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

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

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


 


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


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