Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Отображение детей на Canvas
Flash Zone Forum > Macromedia Flash > ActionScript
puchokstar
Доброго времени суток.

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

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

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

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

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

<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(с);
}

// вызывается по кнопке двинуть куб.
private function moveShape():void{
ar.move(100,0);
var c:UIComponent = new UIComponent();
c.addChild(ar.getShape());
drawSpace.removeAllChildren();
drawSpace.addChild(с);
}

Заранее большое спасибо. ) Уж очень я намучился с этим. Сразу предупреждаю, что до этого c AS никогда не связывался, поэтому любые советы как и на чем рисовать выслушаю с удовольствием. )
MustLive
Цитата
Отображение детей на Canvas

puchokstar

Вероятно проблема в том, что ты некорректно удалаешь детей с Canvas. По вопросам касающимся AS3 обращайся к знатокам данной версий языка ActionScript, в частности к chingachgoog и HaWK (если они сами в эту тему по долгу не заходят, то свяжись с ними, чтобы они в теме ответили).

Цитата
любые советы как и на чем рисовать выслушаю с удовольствием. )

О том как рисовать программно на AS1/AS2 мы не раз писали на форуме, например в этой теме. А использовать ли в AS3 Canvas или что-то другое - это уже тебе решать (и для этого тебе нужно изучить возможности AS3 для рисования).
chingachgoog
Цитата(MustLive @ 10.05.2011 - 01:31) *
По вопросам касающимся AS3 обращайся к знатокам данной версий языка ActionScript, в частности к chingachgoog


Не, я УГ в виде флекса не знаю и время на изучения его АПИ тратить не хочу (про флекс рассказывал уже).
MustLive
chingachgoog, значит для вопросов связанных с Flex нам будут нужны другие знатоки smile.gif (конечно, свою позицию по Флексу ты уже ранее высказал). Всем участникам которые задают вопросы по Flex (в том числе по AS коду) нужно об этом явно указывать.

Т.к. с Флеш редакторами от Адоба я не работал, то мне не известно поддерживают ли они Canvas и mxml, или только Flex их поддерживает. Но UIComponent поддерживается в AS3 также и во флеш редакторах, что я проверил в документации перед тем как отвечать, поэтому и предположил, что люди знающие AS3 (и работающие пусть не во флексе, а во флеше) возможно смогут ответить на этот вопрос.
puchokstar
MustLive, Спасибо ВАМ большое! rolleyes.gif Невероятно удивило, что проявили такое небезразличие к теме.

За последние несколько дней, еще пару раз пытался найти ошибку и все так же не удавалось.

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

Тем не менее, еще раз большое спасибо. )

А где можно посмотреть мнение chingachgoog по флексу? Я ранее никогда со флешом не имел дело, а только С#, Java... Поэтому мне Flex просто навсего привычным для написания кода показался.
chingachgoog
Цитата(puchokstar @ 13.05.2011 - 04:31) *
А где можно посмотреть мнение chingachgoog по флексу? Я ранее никогда со флешом не имел дело, а только С#, Java... Поэтому мне Flex просто навсего привычным для написания кода показался.


/forum/index.php?showtopic=3242

mxml и flex лишь внешне похожи на XAML и WPF. В дотнетовском фреймворке все компоненты (нупочти все) нативные и не встраиваются в компилированный файл...
puchokstar
chingachgoog, спасибо за ответ. )

Наверное, какое-то минимальное мнение о ситуации сформировалось.

Тем не менее, подскажите, коли не сложно, какой средой стоит пользоваться для моей задачи - написать приложение для визуализации трехмерных объектов. Код всевозможных поворотов, сдвигов, изменения размеров и создания проекций объектов на плоскость мне самому надо писать.

Кроме того, буду очень признателен, если вы подскажите, к кому можно обратиться по поводу возможности подгружать 3D объекты из того же 3D Max во время исполнения. То есть, я бы хотел дать возможность пользователю самому загружать интересующую 3D модельку и далее просматривать ее в моем приложении.

Заранее большое спасибо. )
chingachgoog
Если 3D-движок писать самому надо и нет ограничений по производительности, то среду стоит выбрать ту, которая более понятна (а хотя бы и флекс). Если планируется что-то тяжелое и производительность важна, то флекс я бы не стал все же использовать - лучше чистый AS3.
А есть готовые движки. Папервижн, например (по-моему там есть подгрузка из 3D-максовых объектов). Или та же альтернатива.
Папервижн открытый. Т.е. там можно скомуниздить код для импорта 3D-объектов и вставить его в свой движок.

А еще я что-то слышал про Юнити, мол он теперь с флешем срастился - но это совсем краем уха smile.gif
Русская версия IP.Board © 2001-2013 IPS, Inc.