- левая кнопка мыши - таскать динамические тела
- → - следующий пример
- ← - предыдущий пример
- R - сброс примера
- S - создать сверху квадрат
- C - создать сверху круг
Знакомиться с библиотекой эмуляции физики твердых тел Box2D (в оригинале написанной на C++) начал еще с версии для Flash. Но пути IT индустрии складываются так, что Flash стремительно сдает свои позиции. Поэтому решил переметнуться в этой области к Javascript.
Среди многих, на просторах, выделил для себя две версии порта Box2DJS и Box2DWeb. Версия Box2DJS попалась первой, поэтому начал с неё. Но, как оказалось, этот порт не лишен изъянов.
Первое, и самое страшное - это подключение либы. Все классы разбиты пофайлово. А их 64! Решил форкнуть на github, чтобы добавить компилятор и минификатор. А потом пошло-поехало. В результате вот чего доделал:
- Добавил документацию. Оригинал ссылался на документацию из Flash, но там и из-за разницы версий, и из-за неполной портированности самой либы API сильно отличается. Сделал, конечно, только названия классов. Потому как, документирование - не самое интересное дело.
- Добавил примеры и из Flash версии, и из Box2DJS (их вы можете видеть в начале поста). Естественно, только те, что позволил текущий API.
- После того как начал писать примеры понял, что для удобства надо кое-что дописать. В результате появилась раскрашенная debug отрисовка (закончил также для Pulley Joint, которую автор порта не реализовал), методы Initialize у популярных joint'ов и метод QueryPoint для b2World.
- Также, очень раздражала зависимость от библиотеки prototype.js - убрал.
- Совсем чуть-чуть поправил форматирование.
В будущем можно было бы:
- Доделать документацию.
- Доделать примеры из Flash-версии либы (они, кстати, и там не все сделаны).
- Рефакторить конструкторы - повторяются определения в функциях-конструкторах и объекте prototype.
- Рефакторить определения Array и Object.
- Дописать отсутствующие методы (нет свойства bullet, например, и многого другого).
- Некоторые классы можно полностью выпилить (все, что имеют Def в названии - это рудименты C++ - для Javascript не имеют смысла совершенно).
- Думаю, подход к итерациям можно заменить на родной javascript'овский. Хотя бы ради удобства использования.
- В определителе тел для форм сразу выделяется 64 (по умолчанию) ячейки. Подход C++ - не нужен.
Это - все основные мысли, которые возникли в процессе знакомства с портом библиотеки для Javascript. Я думаю, доработок значительно больше.
У версии Box2DWeb лишь заглянул в код. Он оказался аккуратным. Возможно даже полностью написан вручную. Но, почему-то, прямо на главной странице проекта примеры не работают. Это остановило.
Так вот обстоят дела с Box2D в мире Javascript. Я важное что-то упустил?
2 комментария:
> Но, почему-то, прямо на главной странице проекта примеры не работают. Это остановило.
Почему же, работает. Просто загрузка скрипта блокируется.
Создал локальную страничку, открыл исходный код фрейма с примером, скопировал скрипт в конце, закомментировал последнюю строчку, вставил canvas, повесил init() на onload, добавил ссылку на Box2d.min.js -- вуаля. Но там просто несколько тел, всё-таки с манекенами веселее.
> Просто загрузка скрипта блокируется
Это остановило.
Но, возможно, ваша правда. Надо было ковырять Box2dWeb
Отправить комментарий