Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вернуть вершины Shape (http://www.flasher.ru/forum/showthread.php?t=185909)

Sintesis 23.10.2012 23:53

Вернуть вершины Shape
 
Есть Shape состоящий из нескольких соединённых в многоугольник линий, как узнать вершины этого многоугольника?
Дело в том, что в FlashIDE рисуя линиями например - фигура преобразовывается в Shape. А Shape не может иметь детей и до графики не добраться, но очень нужно.

alatar 24.10.2012 01:43

Вся графика в Shape хранится в его graphics.

Добавлено через 2 минуты
Можно получить вершины с помощью библиотеки swfvector.

Sintesis 24.10.2012 01:53

Цитата:

Сообщение от alatar (Сообщение 1101060)
Вся графика в Shape хранится в его graphics.

Это понятно, но graphics ничего не возвращает и присвоить её спрайту нельзя graphics в Shape только для чтения, спасибо за ссылку, плюсую!

Wolsh 24.10.2012 13:16

Цитата:

graphics ничего не возвращает и присвоить её спрайту нельзя graphics в Shape только для чтения
Ну, это не так. Есть Graphics#copyFrom()
Но к Вашему случаю это не относится, как я понимаю. Вы же о рисунке во Flash IDE говорите? Уж не знаю, как Вы получаете к нему доступ как к экземпляру Shape... думаю что никак.

gagaga 24.10.2012 14:43

наследоваться от шейп, определять массив с вершинами и запоминать туда вершины в процессе рисования

Sintesis 24.10.2012 16:29

Цитата:

Сообщение от Wolsh (Сообщение 1101093)
Ну, это не так. Есть Graphics#copyFrom()
Но к Вашему случаю это не относится, как я понимаю. Вы же о рисунке во Flash IDE говорите? Уж не знаю, как Вы получаете к нему доступ как к экземпляру Shape... думаю что никак.

Вообще с IDE только несколько дней работаю, всегда в FD всё делал. Но решил попробовать.
Создал символ Lvl_01 и добавил такое действие к нему:
Код AS3:

var lvl_01:Lvl_01 = new Lvl_01();
trace(lvl_01.getChildAt(0))

выводит Shape, так что Shape это не рисунок и к нему не добраться кодом?

strangedk 24.10.2012 16:58

Код AS3:

(lvl_01 as Shape).graphics


Sintesis 24.10.2012 16:58

Цитата:

Сообщение от gagaga (Сообщение 1101121)
наследоваться от шейп, определять массив с вершинами и запоминать туда вершины в процессе рисования

Во! А это совсем прекрасная идея! Вообще хотел использовать IDE для того, чтоб рисовать полигоны для Box2D, но зачем это нужно если можно сделать простую рисовалку которая складывает вершины в массив, а потом это ещё можно и в XML файл сохранить и использовать когда нужно! Спасибо!

alatar 24.10.2012 16:58

Цитата:

выводит Shape, так что Shape это не рисунок и к нему не добраться кодом?
А вы trace магически способом сделали или все таки кодом?

Во флеш можно создать DisplayObject двумя способами.
1. Инстанцировать соответствующий класс.
2. Задать непосредственно в swf. Тег DefineShape / DefineSprite.\
В любом случае, если эти DisplayObject попадут в display list, на них можно будет получить ссылку ("добраться кодом").

gagaga 24.10.2012 16:59

сейчас угадаю... редактор уровней для игры с физикой делать лень? =) я тоже через это прошел...

Добавлено через 51 секунду
угадал

Sintesis 24.10.2012 17:07

Цитата:

Сообщение от strangedk (Сообщение 1101147)
Код AS3:

(lvl_01 as Shape).graphics


Ну от этого толку мало, всё-равно к рисунку не дотягиваемся.

Добавлено через 16 минут
Цитата:

Сообщение от gagaga (Сообщение 1101151)
сейчас угадаю... редактор уровней для игры с физикой делать лень? =) я тоже через это прошел...
Добавлено через 51 секунду
угадал

Не лень), просто не догадливый! Но всё равно теперь с IDE разобраться захотелось.

Цитата:

А вы trace магически способом сделали или все таки кодом?
Сделал так нарисовал инструментом Line 4 линии, выделил, создал символ - получился клас наследник MovieClip, нажал правой кнопкой мыши в рабочей области, выбрал в контекстном меню "Действие" ввёл там этот код:
Код AS3:

var lvl_01:Lvl_01 = new Lvl_01();
trace(lvl_01.getChildAt(0))

ещё сделал основным классом проекта вот такой:
Код AS3:

package {
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
 
        public class Redactor extends MovieClip {
 
                public function Redactor() {
 
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(_event:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
 
                }
        }
}



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

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