
inkscape+nape=лю...
1
Всем привет.
Я тут решил сделатьклон пушкиновую оригинальную игру с физикой, и задался вопросом, в чем делать уровни. Делать свой редактор сильно лень (это вообще преобладающее чувство последнее время). Flash IDE у меня нет. В общем решил посмотреть на Inkscape. Оказалось, что svg довольно простой формат для обработки. Не скажу, что я решил свою задачу полностью (см.выше про лень), но загрузка данных для физики из svg у меня есть.

Ссылки
Inkscape: inkscape.org/
Краткий урок по Inkscape: www.microugly.com/inkscape-quickguide (не в тему, но пусть будет)
Спецификация SVG: www.w3.org/TR/SVG/
Nape: deltaluca.me.uk/docnew/
Результат
Загружаем из inkscape фигурки и делаем из них физические тела. Как задавать всякие интересные параметры для тел пока окончательно не решил. Пока же реализована примитивная схема, когда есть слои для статических и динамических тел, а также для pivot joint'ов. Для тел цвет задает материал. Если в группе, задающей тело есть картинка, она будет добавлена к телу как graphic.
Для тестов это годится, для реальной работы — нет. Я пока в раздумьях. В принципе inkscape позволяет задавать произвольные атрибуты, но я бы не сказал, что это очень удобно, хотя именно так и делают в основном те, кто использует inkscape как редактор уровней. Предложения приветствуются.
Ограничения следующие: не поддерживаются кривые, не поддерживаются полигоны, состоящие из нескольких полигонов (например полигоны с дырками так могут сохраняться в inkscape). Не поддерживаются все варианты атрибута transform, а только те, что я реально видел. Не поддерживаются клоны объектов. Информация о картинках читается из svg, но при этом будет проигнорировано какое-либо изменение масштабов картинки, реально получается только положение верхнего левого угла и угол поворота, я считаю этого достаточно.
В принципе в планах сделать все же поддержку кривых и, наверное, клонов.
Немного деталей
Если посмотреть внутрь SVG, то видно, что это XML. Тег g — это группа объектов: слой, или просто сгруппированные фигуры. Тег path — это геометрическая фигура, в атрибуте с названием d задаются координаты точек. Тег image — это картинка. У любого из этих трех тегов может быть атрибут transform, который задает изменение координат. Кроме того у каждого объекта есть атрибут id, и может быть атрибут inkscape:label. Я сделал так, что при наличии label считывается он, иначе id. Также я вытаскиваю информацию о цветах заливки и обводки фигур из атрибута style.
Из неожиданных вещей для меня было то, что в inkscape шкала Y идет снизу вверх, а svg предполагает, что шкала идет сверху вниз. И inkscape при сохранении вычитает из высоты документа координату Y. Т.е. объект расположенный у нижней границы документа будет после сохранения иметь координату равную высоте документа, а у верхней — 0, тогда как при редактировании ситуация будет ровно обратной.
В принципе, я сделал загрузку SVG совершенно отдельной от создания тел в nape, поэтому ее можно использовать и для чего угодно еще.
Интересующиеся могут скачать проект для FlashDevelop.
Я тут решил сделать

Ссылки
Inkscape: inkscape.org/
Краткий урок по Inkscape: www.microugly.com/inkscape-quickguide (не в тему, но пусть будет)
Спецификация SVG: www.w3.org/TR/SVG/
Nape: deltaluca.me.uk/docnew/
Результат
Загружаем из inkscape фигурки и делаем из них физические тела. Как задавать всякие интересные параметры для тел пока окончательно не решил. Пока же реализована примитивная схема, когда есть слои для статических и динамических тел, а также для pivot joint'ов. Для тел цвет задает материал. Если в группе, задающей тело есть картинка, она будет добавлена к телу как graphic.
Для тестов это годится, для реальной работы — нет. Я пока в раздумьях. В принципе inkscape позволяет задавать произвольные атрибуты, но я бы не сказал, что это очень удобно, хотя именно так и делают в основном те, кто использует inkscape как редактор уровней. Предложения приветствуются.
Ограничения следующие: не поддерживаются кривые, не поддерживаются полигоны, состоящие из нескольких полигонов (например полигоны с дырками так могут сохраняться в inkscape). Не поддерживаются все варианты атрибута transform, а только те, что я реально видел. Не поддерживаются клоны объектов. Информация о картинках читается из svg, но при этом будет проигнорировано какое-либо изменение масштабов картинки, реально получается только положение верхнего левого угла и угол поворота, я считаю этого достаточно.
В принципе в планах сделать все же поддержку кривых и, наверное, клонов.
Немного деталей
Если посмотреть внутрь SVG, то видно, что это XML. Тег g — это группа объектов: слой, или просто сгруппированные фигуры. Тег path — это геометрическая фигура, в атрибуте с названием d задаются координаты точек. Тег image — это картинка. У любого из этих трех тегов может быть атрибут transform, который задает изменение координат. Кроме того у каждого объекта есть атрибут id, и может быть атрибут inkscape:label. Я сделал так, что при наличии label считывается он, иначе id. Также я вытаскиваю информацию о цветах заливки и обводки фигур из атрибута style.
Из неожиданных вещей для меня было то, что в inkscape шкала Y идет снизу вверх, а svg предполагает, что шкала идет сверху вниз. И inkscape при сохранении вычитает из высоты документа координату Y. Т.е. объект расположенный у нижней границы документа будет после сохранения иметь координату равную высоте документа, а у верхней — 0, тогда как при редактировании ситуация будет ровно обратной.
В принципе, я сделал загрузку SVG совершенно отдельной от создания тел в nape, поэтому ее можно использовать и для чего угодно еще.
Интересующиеся могут скачать проект для FlashDevelop.
- +15
- romamik
Комментарии (2)
А насчет, кто чего знает. Ну вот я Flash никогда не пользовался (и на самом деле не очень собираюсь, т.к. дорогой он, хотя конечно это личная блажь.) А inkscape освоить оказалось очень просто.