Комментарии 23
Неплохо бы демо.
> Что удивляет даже меня самого — неплохая производительность: анимация начинает ощутимо тормозить начинает при 2-3 тысячах.
На каком железе? В каком браузере? А вообще, попахивает LibCanvas'ом.
> Что удивляет даже меня самого — неплохая производительность: анимация начинает ощутимо тормозить начинает при 2-3 тысячах.
На каком железе? В каком браузере? А вообще, попахивает LibCanvas'ом.
Firefox (в Chrome ещё быстрее).
Демо уже добавил (под кодом ссылки на jsfiddle), можете там крутить количество итераций и смотреть.
> А вообще, попахивает LibCanvas'ом
В каком плане? Функции похожи?
Демо уже добавил (под кодом ссылки на jsfiddle), можете там крутить количество итераций и смотреть.
> А вообще, попахивает LibCanvas'ом
В каком плане? Функции похожи?
> Пути рисуются одним из трёх вариантов:
Например, вот этим. Я искренне не понимаю, зачем делать 3 варианта сделать одно и то же, и при этом создавать внутри методов проверки на вид присланных аргументов. _parsePath сожрёт весь процессор :) Такой подход годится лишь для анимации одного-двух объектов, игру на таком не сделаешь.
Кстати, если во время анимации быстро вывести мышь из круга и снова навести, все размеры анимации ломаются :)
Например, вот этим. Я искренне не понимаю, зачем делать 3 варианта сделать одно и то же, и при этом создавать внутри методов проверки на вид присланных аргументов. _parsePath сожрёт весь процессор :) Такой подход годится лишь для анимации одного-двух объектов, игру на таком не сделаешь.
Кстати, если во время анимации быстро вывести мышь из круга и снова навести, все размеры анимации ломаются :)
Вообще говоря, я изначально хотел реализовать полный SVG, т.к. легко переносить SVG-фигуры, ну и на ходу сочинять несложно. Вполне человекопонятный формат… Но потом понял, что реализация займёт больше, чем задумывалось, так что вынес в плагин.
Второй вариант тоже задумывался как такой человекопонятный, но немного другой… Вроде как что удобно — то и использовать.
Третий же изначально вообще подразумевался как удобный для генерации (там были имена свойств f, arg), но потом он тоже превратился в человекопонятный…
_parsePath вызывается только при создании самого пути, проверки на тип простые, так что я не думаю, что сожрёт весь процессор :)
Анимация да, там даже в коде комментарий про это есть ). Ломается из-за отсутствия очереди событий… Сделаю, как только решу, как именно.
Второй вариант тоже задумывался как такой человекопонятный, но немного другой… Вроде как что удобно — то и использовать.
Третий же изначально вообще подразумевался как удобный для генерации (там были имена свойств f, arg), но потом он тоже превратился в человекопонятный…
_parsePath вызывается только при создании самого пути, проверки на тип простые, так что я не думаю, что сожрёт весь процессор :)
Анимация да, там даже в коде комментарий про это есть ). Ломается из-за отсутствия очереди событий… Сделаю, как только решу, как именно.
Почему Вы сделали апдейт через setTimeout? Для этого есть window.requestAnimationFrame же. Установка и исполнение таймеров весьма затратно.
А про requestAnimationFrame я просто забыл :)
Спасибо, реализовано github.com/keyten/Graphics2D/commit/87d9988b0e5771ef93cee28c6f986a988894441d
Для анимации также реализую, пока появилась мысль, как её ещё оптимизировать, думаю.
Спасибо, реализовано github.com/keyten/Graphics2D/commit/87d9988b0e5771ef93cee28c6f986a988894441d
Для анимации также реализую, пока появилась мысль, как её ещё оптимизировать, думаю.
Ээх, велосипеды.
pixi.js возьмите, там и 20 тысяч спрайтов спокойно будут тянуться :)
www.goodboydigital.com/pixijs/bunnymark/ — у меня фпс начинает всаживаться (с 60 до 57 фпс, но все же) на где-то 30к, насколько помню, меньше 25 кадров в секунду — это 50к зайцев.
pixi.js возьмите, там и 20 тысяч спрайтов спокойно будут тянуться :)
www.goodboydigital.com/pixijs/bunnymark/ — у меня фпс начинает всаживаться (с 60 до 57 фпс, но все же) на где-то 30к, насколько помню, меньше 25 кадров в секунду — это 50к зайцев.
Честно говоря, разработка начиналась аж 2 года назад, когда велосипедом это ещё не было :)
Потом на некоторое время пропало свободное время, и вот оно наконец появилось…
PixiJS — вполне естественно, т.к. там WebGL (а это, если не ошибаюсь, практически прямой доступ к видеокарте).
Я подумаю над WebGL-рендером. Тем более, непосредственно за рисование в Graphics2D отвечают всего 5-6 функций.
Потом на некоторое время пропало свободное время, и вот оно наконец появилось…
PixiJS — вполне естественно, т.к. там WebGL (а это, если не ошибаюсь, практически прямой доступ к видеокарте).
Я подумаю над WebGL-рендером. Тем более, непосредственно за рисование в Graphics2D отвечают всего 5-6 функций.
да, именно, там фолбэк до канваса, если нет webgl. потому он и лучше для быстрой графики, к тому же — большое сообщество.
проблема таких велосипедов не в том что они хуже, а в том, что не поддерживаются. Я вот с vue.js мучаюсь. Он проще, быстрее и эффективнее ангуляра, но реально мешающие баги автор очень медленно исправляет.
проблема таких велосипедов не в том что они хуже, а в том, что не поддерживаются. Я вот с vue.js мучаюсь. Он проще, быстрее и эффективнее ангуляра, но реально мешающие баги автор очень медленно исправляет.
О, интересная библиотека (про vue.js). На беглый взгляд напоминает Ractive.js
Собственно, сам Graphics2D начался с проблем с одним из таких фремйворков ( вот этого: jcscript.com/ ), в определённый момент мне пришла мысль — а почему бы не написать свой?
Сам Graphics2D собираюсь поддерживать, как минимум, пока не пофикшу максимум (прошу прощения за тавтологию) багов, всех, что найду, и не реализую несколько интересных мне идей в плагинах.
Собственно, сам Graphics2D начался с проблем с одним из таких фремйворков ( вот этого: jcscript.com/ ), в определённый момент мне пришла мысль — а почему бы не написать свой?
Сам Graphics2D собираюсь поддерживать, как минимум, пока не пофикшу максимум (прошу прощения за тавтологию) багов, всех, что найду, и не реализую несколько интересных мне идей в плагинах.
new Date().getTimeOfDay();
Uncaught TypeError: undefined is not a function
Разумеется, это псевдокод :)
Date.prototype.getTimeOfDay = function(){
var h = this.getHours();
if(h <= 3 || h > 23)
return "ночь";
if(h > 3 && h < 11)
return "утро";
if(h >= 12 && h < 17)
return "день";
return "вечер";
}
В примерах если быстро водить мышкой, то круги или сжимаются в точку или разрастаются на весь экран.
Баг или фича?
Win x64, Opera последняя.
Баг или фича?
Win x64, Opera последняя.
Баг, во всех браузерах, из-за отсутствия очереди анимаций (пока над ней думаю). То есть, анимация уменьшения запускается до окончания анимации увеличения, в итоге получается вот так.
Уже сообразил, как пофиксить, сделал :)
jsfiddle.net/9v63govv/4/
Теоретически ещё может, но практически — ничего не заметил.
Уже сообразил, как пофиксить, сделал :)
jsfiddle.net/9v63govv/4/
Теоретически ещё может, но практически — ничего не заметил.
какие преимущества перед cocos2d-html5?
Cocos2D — игровой движок, а Graphics2D — фреймворк для рисования. И больше ни для чего.
То есть, звуков, физики… в самой библиотеке точно не будет, а вот в плагинах могут появиться ).
Graphics2D это простой фреймворк, который можно понять, бегло пролистав документацию, даже без её чтения понять код… Ну и, разумеется, очень несложно использовать.
Но всё, что он делает — рисует (хотя, ещё раз повторюсь, плагины будут расширять эту функциональность во все стороны)).
А вот Cocos2D — это большой внушительный инструмент, с физикой, эффектами, WebGL, скелетной анимацией, частицами, тайлами, параллаксом, звуком…
Всё зависит от того, что хотите делать вы :).
То есть, звуков, физики… в самой библиотеке точно не будет, а вот в плагинах могут появиться ).
В Cocos2D же...
Scene management (workflow)
Transitions between scenes
Sprites and Sprite Sheets
Effects: Lens, Ripple, Waves, Liquid, etc.
Actions (behaviours):
Trasformation Actions: Move, Rotate, Scale, Fade, Tint, etc.
Composable actions: Sequence, Spawn, Repeat, Reverse
Ease Actions: Exp, Sin, Cubic, Elastic, etc.
Misc actions: CallFunc, OrbitCamera, Follow, Tween
Assets manager (hot update)
Basic menus and buttons
Integrated with physics engines: Chipmunk and Box2d
Particle system
Skeleton Animations: Spine and Armature support
Fonts:
Fast font rendering using Fixed and Variable width fonts
Support for .ttf fonts
Tile Map support: Orthogonal, Isometric and Hexagonal
Parallax scrolling
Motion Streak
Render To Texture
Touch/Accelerometer on mobile devices
Touch/Mouse/Keyboard on desktop
Sound Engine support (CocosDenshion library) based on OpenAL or WebAudio on web
Integrated Slow motion/Fast forward
Fast and compressed textures: PVR compressed and uncompressed textures, ETC1 compressed textures, and more
Resolution Independence
Modularized engine for customization
Open Source Commercial Friendly: Compatible with open and closed source projects
OpenGL ES 2.0 (mobile) / OpenGL 2.1 (desktop) based
Full WebGL support and auto canvas fallback
www.cocos2d-x.org/wiki/Cocos2d-JS
Transitions between scenes
Sprites and Sprite Sheets
Effects: Lens, Ripple, Waves, Liquid, etc.
Actions (behaviours):
Trasformation Actions: Move, Rotate, Scale, Fade, Tint, etc.
Composable actions: Sequence, Spawn, Repeat, Reverse
Ease Actions: Exp, Sin, Cubic, Elastic, etc.
Misc actions: CallFunc, OrbitCamera, Follow, Tween
Assets manager (hot update)
Basic menus and buttons
Integrated with physics engines: Chipmunk and Box2d
Particle system
Skeleton Animations: Spine and Armature support
Fonts:
Fast font rendering using Fixed and Variable width fonts
Support for .ttf fonts
Tile Map support: Orthogonal, Isometric and Hexagonal
Parallax scrolling
Motion Streak
Render To Texture
Touch/Accelerometer on mobile devices
Touch/Mouse/Keyboard on desktop
Sound Engine support (CocosDenshion library) based on OpenAL or WebAudio on web
Integrated Slow motion/Fast forward
Fast and compressed textures: PVR compressed and uncompressed textures, ETC1 compressed textures, and more
Resolution Independence
Modularized engine for customization
Open Source Commercial Friendly: Compatible with open and closed source projects
OpenGL ES 2.0 (mobile) / OpenGL 2.1 (desktop) based
Full WebGL support and auto canvas fallback
www.cocos2d-x.org/wiki/Cocos2d-JS
Graphics2D это простой фреймворк, который можно понять, бегло пролистав документацию, даже без её чтения понять код… Ну и, разумеется, очень несложно использовать.
Но всё, что он делает — рисует (хотя, ещё раз повторюсь, плагины будут расширять эту функциональность во все стороны)).
А вот Cocos2D — это большой внушительный инструмент, с физикой, эффектами, WebGL, скелетной анимацией, частицами, тайлами, параллаксом, звуком…
Всё зависит от того, что хотите делать вы :).
Захотелось своё, да). Но не только.
Во-первых, скорость: самостоятельный парсинг пейпером JavaScript-а явно очень не ускоряет рисование. Да и обновление там по таймауту, а не по необходимости, насколько я помню.
Во-вторых: на мой взгляд, в пейпере много лишнего. Например, импорт SVG или выделение путей — они нужны не всем и каждому.
Имхо, вынести дополнительную функциональность в плагины — более удачная идея; чем я сейчас и занимаюсь для graphics2d.
Недостатки — у graphics2d сейчас функциональность немного пониже. Думаю, это будет недолго.
Это из того, что на виду и легко назвать :)
Во-первых, скорость: самостоятельный парсинг пейпером JavaScript-а явно очень не ускоряет рисование. Да и обновление там по таймауту, а не по необходимости, насколько я помню.
Во-вторых: на мой взгляд, в пейпере много лишнего. Например, импорт SVG или выделение путей — они нужны не всем и каждому.
Имхо, вынести дополнительную функциональность в плагины — более удачная идея; чем я сейчас и занимаюсь для graphics2d.
Недостатки — у graphics2d сейчас функциональность немного пониже. Думаю, это будет недолго.
Это из того, что на виду и легко назвать :)
Ну как я и говорил, это имеет мало смысла.
Базовые векторные операции в красивой обёртке хороши для демок на сайте, а юзать их на практике — я почти не видел такого и таких фреймворков тьма)
Чисто так поучиться писать на JS — похвально)
Базовые векторные операции в красивой обёртке хороши для демок на сайте, а юзать их на практике — я почти не видел такого и таких фреймворков тьма)
Чисто так поучиться писать на JS — похвально)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Graphics2D.js — объекты, интерактивность, анимация на canvas… И ничего лишнего