Как стать автором
Обновить

Комментарии 47

Здорово! Очень интересно!
круто, только примеры не работают :)
Они не грузятся или не работают? :) Я проверял в IE9 RC, Chrome 10.0.648.82 beta, Firefox 4b11 и Opera 11.01 на Win7. Какой у вас браузер?
HTTP Error 503. The service is unavailable.
Ой )) Видимо, умер — выложил все примеры и финальную версию одним файлом — см. ссылку в конце.
Забавно, что практически все проверки вы производили на бетаверсиях браузеров, которые по определению нестабильны и которымы пользуется пока минимальное кол-во людей :)

Попробовал на последнем стабильном Firefox — работает :)
Чуть-чуть подправить цвета…
Здорово, но чтобы подарок был оформленным, девушке надо дарить такую открытку, как фон рабочего стола на новеньком, только что купленном ей ноутбуке.
НЛО прилетело и опубликовало эту надпись здесь
Тем, кто не может покупать девушкам ноутбуки, дарить подобные подарки не стоит? :)
Это будет как-то не солидно. Можете конечно подарить ноутбук ручной сборки)). Вот кстати сейчас вспоминается пост про самодельные сережки. Как раз по бабочке на сережку.
Поздравительная открытка к 8 марта на HTML5 и EaselJS и блог компании Microsoft. Казалось бы, какая связь?
Вы против? :)
Против чего? Я за правильную классификацию информации. Не нашел в заметке ничего, что бы связывало её с фимой Microsoft.
Автор? :)
Создатели EaselJS сотрудничают с MS, а в топике типа пиар)
Честно, у меня не было цели рекламировать именно EaselJS, но если бы и было — оно того стоит ;) Реально облегчает жизнь во многих сценариях.
Ну, у меня есть LibCanvas, и, судя по мануалу EaselJS (та и не шибко изящным исходникам в топике[ничего личного, исходники сами по себе — неплохи, но фреймворк мог их значительно улучшить]) — они ооочень сильно не дотягивают.
Свое всегда кажется лучше и удобнее :) И согласен, есть еще куда двигаться, библиотека еще только развивается. Впрочем, на ее ранеей версии сделано www.pirateslovedaisies.com/ — думаю, это достаточный показать потенциала.
Я знаю про пиратов — вполне неплохо. Но пиратов можно было бы сделать и без фреймворка.

Я стараюсь судить объективно. Например, JQuery и MooTools круче, чем мой atomJS, с чем я даже не собираюсь спорить.

Но смотрите — кучу рутинных операций вам всё равно приходится пределывать вручную.

Прелоадинг картинок, анимацию, та даже получение случайной точки на холсте.

Да и идею с методом «tick» в глобальной области видимости, а также this.onMouseOver.

Обе штуки можно было бы исправить нормальной событийной моделью, как, например, сделано в JQuery:
this.onMouseOver = function (e) { this.reset(); };
// =>
this.bind('mouseover', function () {
    this.reset();
});
// а также
stage.bind('update' , function () {});


На первый взгляд, конечно, разницы нету, но что будет, если надо будет прилепить два события? В dhtml раньше тоже так делали, но ведь отказались от этого со временем?

В общем, много вещей — непродуманно, а много — вообще не сделано. Ну да ладно, кому то оно нравится и это главное)
Кстати, оно основано на фреймворке YUI?
Спрашиваю вот почему — во всех заголовках мануала — есть упоминание, а в тексте — не нашёл:
В документации используется YUIDocs вместо JSDocs, использовавшегося ранее.
EaselJS? Отсылок на YUI не видел. Насколько я знаю, авторы отталкивались от задачи воспроизвести на canvas и javascript привычные для них возможности flash и соответствующих классов на actionscript.
у меня все бабочки улетели и не хотят возвращаться! (ф5 помог)
Иногда они возвращаются ;) Можно кликать мышкой — будут появляться новые. В идеале, конечно, надо предусмотреть логику на возврат :)
В Chromium 11.0.691.0 (76865), Ubuntu 10.10 бабочки начитают лететь, только если навести на них курсор.
Так и должно быть. Иногда они начинают летать сами — в коде на это есть специальное условие.
Ага, пересмотрел листинг и понял, что так задумано.
Позвольте спросить, а почему именно так? Пусть себе сами летают с редкими остановками.
Чтобы они сразу все не разлетелись :) Исходники доступны, если интересно, можете подкрутить так, как вам больше нравится ;)
Вы меня опередили, только хотел сказать что бабочки ленивы и пока не пнешь не летают :)
«на фоне красовой»
Прошу прощения, так и должно быть?
Спасибо )
«Машем», а не «махаем»!
Спасибо)
Я сначала всех бабочек прогнала, а потом накликала целую кучу что они бедняжки даже летали тяжело!
Спасибо за поздравление! ^_^
Я, конечно, очень сильно извиняюсь, но совершенно унылые бабочки. Вы же видели как летают бабочки (живые). С такой частотой взмахов крыльями как у Вас, простите, но «не взлетит».
По задору больше напоминает осенних мух, нежели бабочек.
Если делать быстрее, то ничего не видно будет :) Воспроизвести реалистично движение крыльев бабочки — отдельная сложная задача. В частности, крылья не являются двумя жесткими плоскостями — это динамичные поверхности, которые синхронно движутся, создавая вокруг необходимые вихревые потоки. Буду рад посмотреть, если воспроизведете.
Ну это ведь казуалка. Не стоит требовать от неё симуляции.
Боже мой, такой огромный код ради такой убогой анимации…

Мы тоже на днях делали анимацию бабочки. Решили попробовать интеграцию Flash+JS.
Получилось вот так. (нужно навести мышку на логотип).
Жалко, надпись в фоновом изображении. Так просто не поменяешь
Если нужно, могу выложить картинку без надписи.
Кто-нибудь может объяснить доступно, как берутся формулы для взмахов крыльев и откуда взяты константы в них? Как это было расчитано?
butterfly.move = function () {
var wingAngle = (butterfly.steps - butterfly.step) / butterfly.steps * Math.PI;
butterfly.lWing.scaleX = butterfly.rWing.scaleX
= butterfly.scale * (0.4 + 0.6 * Math.abs(Math.cos(wingAngle * 4)));

butterfly.step--;
}

1. Взмахи крыльев делаются через изменение масштаба по оси X.
2. Т.к. бабочки разного размера, в качестве отправной точки масштаба используется мастштаб бабочки butterfly.scale в качестве множителя. (Если размер не менялся, то butterfly.scale = 1).
3. Дальше масштаб нужно менять периодически — здесь хорошо подходят тригонометрические функции.
4. Полет бабочки состоит из {butterfly.steps} шагов, текущий шаг — {butterfly.step}. Из этих двух чисел получается пропорция в отрезке [0, 1.0].
5. Для косинуса (беру cos из соображения удобства) нужно передать угол, пропорцию выше, нужно перевести в интервал [0, PI], значия cos будет, соответственно, 1->… -> 0 ->… -> -1. Так как отрицательные значения нам не нужны, берем модуль (abs).
6. Дополнительный множитель 4 — определяет число взмахов за полет.
7. Коэффициенты 0.4 и 0.6 в сумме должны давать 1 (полный масштаб), 0.4 — сколько нужно оставить, чтобы крылья не схлопнулись.

Как-то так :)
Все понятно, кроме числа взмахов за полет. Почему оно умножается на угол?
Математика :) Умножение чисел из диапазона [0; PI] на число взмахов n приводит к диапазону [0; nPI], в котором значения cos n раз пройдут цикл 1->… -> 0 ->… -> -1.
Уже понял, сорри — чтобы крылья полностью разворачивались не 1 раз, а в данном случае при пропорции, равной 0, 0,25, 0,5, 0,75 и 1.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий