Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Ну во-первых, внутри тега source другие теги не работают, поправьте пожалуйста.
LibCanvas — да, кстати сам TheShock, если не ошибаюсь, работает в области игр.
P.S. Кстати я тоже занимаюсь своим фреймворком для canvas :).
Модулярность вроде как отсутствует
shock@shock-notebook:~/dev/libcanvas/Builder$ ./build Point Point3D > result.js
/**
* LibCanvas
*
* Included Components:
* LibCanvas/LibCanvas
* LibCanvas/Geometry
* LibCanvas/Point
* LibCanvas/Point3D
*/
Опять же, тестов нет
Ну и размер впечатляющий (106KB плюс AtomJS как dependency).
И к тому же ещё использует ES5 аксессоры, что полностью исключает IE<9 и другие пожилые браузеры.
Смотря на код, вижу ещё и навешивание методов на хост-объекты.
this.callSuper('initialize', options);
Зато в LibCanvas интерактив хороший; действительно почти как в Fabric.
canvas.renderAll(). В LibCanvas мы при изменении дёргаем element.redraw(), а уже фреймворк считает, что надо перерисовать, смотрит, не затрём ли мы что-то другое и так далее. В итоге, на поле может быть сотни объектов, а проц чувствует себя спокойно.На самом деле стоило смотреть на новую версию, которую я разрабатываю и как раз перелил в основной бранч. Там и коммиты регулярные и вес побольше.
Это фича. Я специально отказался от IE<9, т.к. там нереально реализовать всё необходимое для обратной совместимости с Canvas.
В новой версии я сделал это опциональным. Всё так же, при желании можно расширить прототипы, но теперь библиотека не требует этого
На счёт nodeJS скажу, что лично я не юзал, но ребята на сервере его юзают)
Кстати, я нашёл отличную альтернативу этому)
Ну вот к примеру Various: Static Canvas. Что я вижу? 3 статичных объекта и 1 движущийся. Двигается один, а перерисовывается все 4 из-за того, что вызывается canvas.renderAll(). В LibCanvas мы при изменении дёргаем element.redraw(), а уже фреймворк считает, что надо перерисовать, смотрит, не затрём ли мы что-то другое и так далее. В итоге, на поле может быть сотни объектов, а проц чувствует себя спокойно.
Хитрая работа со слоями и подобная перерисовка вообще позволяют держать десятки тысяч объектов на карте и проц будет чувствовать себя прохладно)
Ну и мне всегда было непонятно, почему во всех либах круто раскрыта всякая банальщина вроде работы с вектором, но никаких интересностей типа графических редакторов и игр)
object.left = 100; // new value canvas.renderAll(); // need to mark object dirty before rendering although this could be "fixed" via set: object.setLeft(100); // object is marked as dirty canvas.renderAll(); // object is rendered at a new location
object.left = 100; // new value
object.top = 100; // new value
object.redraw();
Ну там в принципе и искать не надо :) Все альтернативы уже известны. Можно конечно сократить буквально до `$super()`. Но у всего как плюсы так и минусы.
atom.declare('MyClass', ParentClass, {
initialize: function initialize () {
initialize.previous.apply( this, arguments );
// our code here
}
});
MyClass = new Class({
Extends: ParentClass,
initialize: function initialize (a, b, c) {
this.parent( a, b, c );
// our code here
}
});
Важно понимать что Fabric не позиционирует себя как framework для создания игр — у нас нет абстракций для работы со спрайтами, звуком, collision detection, и т.д. Поэтому, например, не было особого приоритета оптимизировать тысячи объектов на канвасе. Однако для удобной работы с коллажами Fabric по-моему идеален
initialize.previous.apply( this, arguments );
Проблема в том, что родной canvas API ужасно низко-уровневый
Вы так шутите что ли? ))
все трансформации проходят только относительно центра объекта?
я бы хотел трансформации по выбранной точке делать — есть возможность?
ну вот скажем я беру кубик с левой стороны и тяну вбок — чтобы правая сторона оставалась на месте, а левая двигалась только… вытягивать в нужную сторону как бы…
еще интересно что манипулятор трансформации именно скейлит объект, в итоге обводка объекта тоже скейлится и вытягивая квадратик получаешь по бокам другую толщину контура.
есть ли возможность при таскании за манипулятор менять не скейл объекта, а его размер? то есть width и height??
и есть ли кривые безье? а то квадратики да кругляки как то уже не радуют, хочется гладких кривых управляемых…
и все сказанное можно еще к группам применительно спросить — выделяем 3 объекта и тягяем их сбоку — чтобы все не скейлились, а изменяли свои размерности и все трансформации шли по некому пайвоту. лучше всего чтобы именно как вытягивание работало все — то есть двигаем левую границу, все остальные на места остаются…
Знакомимся с Fabric.js. Часть 1-я