Находка для аниматора - делаем камеру во флэше
10.04.2008, автор Stormit, рубрики: ActionScript, АнимацияКогда я набрел на мульты Адама Филипса, первое что я сделал после просмотра - начал их декомпилировать. И анимацию можно детально просмотреть, и что-нибуть интересное найти. Интересное нашлось сразу, точнее я не сразу понял как из этого fla-файла, получается такой сказочный swf. Оказалось что Адам, тот еще хитрец - использует секретное оружие, которое разработал его друг Sham Banghal - виртуальную камеру. Посмотреть как она работает и скачать ее можно здесь.
Вещь очень хорошая, а главное нужная и полезная - часто выручает. Однако есть в этой версии некоторые недоработки - она корректно работает только на главной линейке. Почти всегда это не удобно, я например, предпочитаю засовывать анимации в символы - легче потом переносить между сценами. В общем переделал ее под себя, заодно перевел ее на более модные функции. Теперь она работает на любом уровне вложенности, поддерживает все виды трансформации(и цветовую в том числе). Для экстремалов, сделал поддержку фильтров (нужно раскомментировать строку в коде).
Делаем ее так: создаем клип, внутри него делаем 2 слоя. На одном рисуем рамку по размерам флэшки (это важно, иначе могут быть пустые края по сторонам) - это объектив камеры, на другом, в кадре, пишем код:
import flash.geom.Transform; import flash.geom.Matrix; var level = 0;//на сколько клипов вверх компенсировать трансформацию cameraFrame._visible = false;//делаем саму рамку невидимой init(); //================================== //don't tuch this :) function init(){ var oldMode = Stage.scaleMode; Stage.scaleMode = "exactFit"; w = Stage.width; h = Stage.height; Stage.scaleMode = oldMode; recalcParentMatrix(); cameraStep(); onEnterFrame = cameraStep; onUnload = resetStage; } function recalcParentMatrix() { mc = _parent; if(level){ var i = level - 1; } else { var i = 1000; } while (i-- && mc && mc != _root) { var tempTrans = new Transform(mc); if (!parentM) { parentM = tempTrans.matrix; } else { parentM.concat(tempTrans.matrix); } mc = mc._parent; } cameraTrans = new Transform(this); topLevelTrans = new Transform(mc); resetM = topLevelTrans.matrix; resetTopLevelColor = topLevelTrans.colorTransform; } function cameraStep() { topLevelTrans.colorTransform = cameraTrans.colorTransform; curM = cameraTrans.matrix; if (parentM) { curM.concat(parentM); } curM.invert(); curM.translate(w / 2,h / 2); topLevelTrans.matrix = curM; //mc.filters = this.filters; } function resetStage():Void { topLevelTrans.matrix = resetM; topLevelTrans.colorTransform = resetTopLevelColor; }
Использовать камеру очень просто, создайте анимацию, как будто она движется поверх сцены и снимает то что вам нужно. Все трансформации примененные к камере, автоматически пересчитываются на сцену. Чтобы было понятнее, вот пример (здесь анимируется ТОЛЬКО камера):
По умолчанию в коде переменная level равна 0. Это значит, это значит, что трансформация буде пересчитана до _root (не важно как глубоко лежит камера). Отличное от нуля число как раз и определяет, на сколько уровней вверх пересчитывать компенсацию. Это полезно, если какие-либо объекты должны всегда находится в кадре (ложить их нужно повыше, куда компенсация не добегает). В моем примере так висит плеер. Намудрил с текстом, но если не понятно, задавайте вопросы.
Для особо ленивых, даю ссылку на готовый fla-файл:
cameraX3 (14.7 KB, 2,042 hits)
P.S. Кстати давно хочу сделать какую-то игру на ее основе. А пока я играю в Blogowar.ru, чего и вам советую.
Интересно на 19%




а в каком флеше, записан файл cameraX3? у меня в 8-ом не открывается(((
а вообще было бы здорово, выложить урок на Demiart.ru с использованием камеры…
В CS3 формате.
Не отставайте, в CS3 много интересного, как для аниматоров, так и для программистов.
Я отправил вам на почтовый ящик файл в 8-й версии.
здравствуйте. очень интересна камера… но вот в чем трабл… экшн скрипт не зная наверное и не стоит лезть… НО, ЧЕРТ ПОБЕРИ!!! так хочется!!! =) все сделал точно по инструкции, только не сам написал буквочку в буквочку, а копировал ваш скрипт… но все время возникает ошибка - показывает что в 55-й строке… решил пойти другим путем, сделал все один в один как показано в исходнике, даже скрипт оттуда копировал… опять та же ошибка.. помогите разобраться плз… очень надо.. ага
а сайт классный… я у вас тут жить останусь =)
спасибо за ответ… очень содержетельно вразумили ламера… =(
как она работает наконец разобрался +) методом делитанского тыка… но все же остался вопрос - как изменить размер пропорции камеры? когда файл других размеров, несеметричное вытягивание камеры приводит к искажению изображения
с этим тоже разобрался… спасибо….
очень класная штука,ваша камера (посижываю на вашем сайте хитрости изучаю)
как писал автор выше методом тыка разобралась,
вроде как ей пользоватся!
но остался вопрос!
незнаю как сделать маску присохранении файла в swf
остаются поля всей картинки!
а на камеру вроде как маска не действует!
может что то элементарное ,но что?
в любом случае спасибо за ресурс
Классная штука)))
И сайт хороший)))
Так и не разобрался я с этой камерой!Движение как было обычным(tween) так и осталось обычным…
Хочу просто баннер сделать с использованием камеры.
Просто анимируйте (tweening) положение и размер мувиклипа самой камеры и всё. Скрипт сам всё пересчитает.
Привет Стормит)
Слушай.. я тож 8-ой юзаю флеш)
просто CSы тормозят.. комп слабенький.. не мог бы ты мне фла тож выслатЬ на мыло пжалст?)
Оч нужная тема))))
Стооорм) Выложи сюда на 8-ой флеш, думаю много кто его качать будет)
Будьте Так добра Вышлите пожалуйста на мыло на flash 8 а то ничего не понял зарание спасибо))))
Уважаемый Stormit! А не осталось ли у Вас, случайно декомпилированных мультов А.Филипса? Очень хотелось бы посмотреть (иметь их в своей коллекции), а как их декомпилировать, я не в курсе! (Нету навыков программирования). Хотя они наверное огромный вес имеют!
Для этого не нужно уметь программировать. Погуглите на тему “swf decompiler”.
За счёт чего затемняеца экран на скаченном фла файле?
Думал методом затемнения мувиклипа камеры.. оказалось что нет
И я так думаю не с проста же на самой камере снизу квадратик с цветами?
Для чего он?
Как раз “методом затемнения мувиклипа камеры”. А квадратик с цветами чтобы видеть как будут выглядеть эти цвета в мульте в этот момент.
В этом примере с подложкой вообще ничего не делается
Подскажите, а можно ли сделать камеру в 5 версии Flash - очень надо знать, простое копирование текста в Action редактор Flash 5.0 - не действует.
Не знаю, можно ли сделать всю функциональность, только вот зачем?
а можно както отписать меня от рассылки на все новые коментарии к этому посту?
это очень не удобно !тем более на мой вопрос вы не отвечаете!
с уважением спасибо !
Я посмотрю в базе, что можно сделать, а вопрос просто звучит странно
Делайте маски обычным образом в клипах, там где вы сочтёте нужным. Камера всего лишь определяет собой зону которая будет подгоняться на размер сцены. Маска в этом случае просто бессмысленна и ненужна.
спасибо !посмотрите пожалуйста!
не думаю что это только у меня проблема !
на счет вопроса
наверно у меня там чтото было нетак!
разберусь думаю со временем!:)
в любом случае спасибо ! фича прикольная!
Здравствуйте! Я тоже не разобрался - где-то с размерами начудил! К сожалению тоже на 8ке, можно исходник? RuStep@list.ru
Хороший пример..автору респек:)
p.s. А с фильтрами тормозииит ппс…
Здравствуйте.
Как вы относитесь к декомпиляции флеш-файлов?
Я считаю это хорошей возможностью для обучения. Но на многих флеш-форумах осуждают и банят при слове “декомпиляция”
Просто не нужно путать инструмент (декомпайлер) и намерение человека. Нет ничего плохого чтобы заглянуть внутрь и узнать что-то новое. Плохо, когда на базе декомпилированных флешек делают свои игры, баннеры, сайты… Плохо, когда кто-то таким образом зарабатывает, так как это нечестно по отношению к разработчику.
Я бы без проблем показывал исходники своих игр всем желающим, если бы через пару дней не появлялись десятки клонов на них.
Большое спасибо! Очень помогло. Буду заглядывать к вам за наставлениями.
Всё что может взять человек из флешки с помощью декомпилирования только графику. И это очень важно. Если после декомпилирования код мало годен и мало читаем да и защитить его можно, хоть байт кодом к примеру
a=function(){_globa={thi:__bytecode__(”99″)},delete(_globa);},a(),delete(a)
то с защитой графикой дело обстоит куда сложнее..
to live3d
>>>Я считаю это хорошей возможностью для обучения.
Каким образом и чему на декомпилированых флешках вы собираетесь учиться?
Моё мнение к декомпилированию флешек самое отрицательное…если только это не мои флешки.
Можно подсмотреть как делается какой-нибудь эффект анимации. На начальном этапе бывает полезным
Особенно когда на всех форумах посылают погуглить.
Здравствуйте, у меня совсем уж ламерский вопрос: а как производить декомпилирование флешки?
сильно не пинать…
заранее спасибо
Для этого есть специальные программы, о которых Гугл знает достаточно. Вообще это скользкая тема и я бы не хотел её здесь обсуждать. Любой автор вкладывает много сил в свои труды и ревностно к ним относится, так что использование декомпилированных флешек целиком соизмеряется с вашей совестью.
Ух ты! Мне понравилось!
kil33″>>>Я считаю это хорошей возможностью для обучения.
Каким образом и чему на декомпилированых флешках вы собираетесь учиться?
Моё мнение к декомпилированию флешек самое отрицательное…если только это не мои флешки.”
-Можно таким образом покадровую анимацию просматривать по каждым кадрам. Особенно это пригождается, когда не знаешь как делать взрывы, всплески, клубы дыма…
Спасибо. Очень интересно! Постараюсь пройтись по всем хитростям с самого начала ))
Очень полезно для тех, кто любит рисовать ручками в среде разработки flash, но мне хочется сделать пользовательский класс xitriCamera, который делает тоже самое, но только программно. Так как это делают в физических движках (таких например, как альтернатива 3D ), но только в данном случае в более упрощенной форме поскольку осей координат всего две.
например: у меня есть некий myDisplayObject:DisplayObject и с помощью этого класса я мог бы сделать буквально следующее
// cоздаю камеру и определяю, с каким объектом она работает
var myCamera = new Camera (d:DisplayObject);
// добавляю ее на сцену
addChild (myCamera);
// включаю ее:
// Этот метод заставляет видить d:DisplayObject как-бы через камеру
myCamera.translate;
// Эти методы позволяют манипулировать видом
myCamera.moveTo (x,y) - перемещаться по объекту
myCamera.setСolor(0×000000) - изменять цвет (как-будто накладывать стекло на объектив)
myCamera.setScale (w_cof,h_cof) - наезжать и отъезжать
myCamera.setAlpha (a_cof) - изменять прозрачность
myCamera.setFilters (filters:Array) - применять фильтры к изображению
C удовольствием поделюсь результатами своей работы, но пока не могу понять следующих строчек кода:
1. while (i– && mc && mc != _root)
2. if (parentM) {
curM.concat(parentM);
}
curM.invert();
curM.translate(w / 2,h / 2);
Буду рад если вы мне поможете в этом разобраться.
Этот код складывает матрицы трансформации всех родительских клипов до _root (или на заданное количество уровней - переменная level), потом инвертирует её и применяет к родительскому клипу камеры для компенсации трансформации (масштабирует его так, чтобы камера оказалась размером с флешку).
А вообще, уже всё сделали, вот камера на AS3
А как ей пользоваться?
Правильно ли я все понимаю ? - кладем символ камеры в библиотеку. С помощью linkage соотносим ее с каким угодно пользовательским классом, расширяющим MovieClip или Sprite. В коде создаем новый объект этого класса. Далее манипулируем им как обычным спрайтом ?
Не понимаю к какому объекту в этом случае будет производится трансформация.
Вообще простите что трачу ваше время, я просто еще не особо методом тыка ее попробовал. Но меня раздражает что код, в кадре а не в отдельном .as по-моему для AS3 это уже не серьезно.
а в можно ли сделать так ,что бы камера срабатывала при публикации в avi?
Почему, когда я использую tween, начинает хорошо падать fps? почти на 10 едениц…
to inozemcev
Это AS1 - просто кладите символна сцену и анимируйте. Скачайте пример, там всё показано.
to dada
Самый простой способ записать видео с этой камерой, “захватить” его с помощью програмки Sothink SWF to Video Converter
berch
Потому что перерисовывается вся флешка, к тому же при масштабировании тратятся дополнительные ресурсы.
Получается через раз, я копирую камеру с вашего клипа в свой и засовываю в символ, после чего автоматически появляется еще 2мувиклипа(я понял, что так и должно быть), а после всего этого, я выбираю один из этих мувиклипов и перетаскиваю его к себе на таймлай, Запускаю тест сцену, появляется ошибка 1046 или 8.:)) function resetStage():Void {
Очень надо для моего мегО-мульта. Помогите плз
Сильно много операций. Просто перетащите клип с камерой в свою флешку и скомпилируйте. Если все хорошо, кадре в 10-м передвиньте клип с анимацией и создайте твиннинг. Должно работать.
Если не получается - сделайте свой мульт в моём примере
при вращении камеры, во время просмотра картинка вращается в другую сторону….
Здравствуйте Стормит!!!
Будьте любезны, скиньте исходник на Flash 8 и вы спасете меня от неминуемой смерти!!!
Очень на вас надеюсь!!! заранее спасибо!!!
Пользовался этой камерой в течение несеольких проектов(Спасибо автору), все было отлично, но вот начал делать очередной мультфильм, и камера стала странно себя вести. Разрешение я поставил в проекте 1280х768, после чего вставляю камеру в тайм лайн,увеличиваю её до нужного мне размера. В итоге камера показывает не тот размер, что я ей дал а наоборот. Поясняю. Когда делаю маленькую камеру, при просмотре сцены камера показывает все вокруг, включая то, что происходит за полями(она(камера:) становится огромной).Если же наоборот, происходит обратный эфект. )) Помогите!!! буду очень признателен!!!
Уважаемый Stormit. Вы просто молодец !!! Светлая голова!!! Как здорово что Вы придумали эту виртуальную камеру во флеше. Это такое облегчение в работе !!! Можно Вас попросить прислать мне на мыло исходник на Flash 8.
За помощь заранее покорнейше благодарю !!!
Уважаемый Stormit. Услышьте меня пожалуйста !!!
Пожалуйста !!! очень надо сохраните этот файл под флеш мх и пришлите на почту v0itenk0@ukr.net
Очень прошу!!!!!!!!!!! горю прямо!!!!!!!!!!1
Привет! Подскажите пожалуйста, у меня при экспортирования в avi эффект камеры теряется!
Просматривается как обычный прямоугольник который двигается по экрану!
С прискорбием сообщаю, что в avi эта самая камера не действует. А только в swf.
Не могу понять, как сделать интерфейс на этой камере. Stormit, подскажи пожалуйста.
Спасибо огромное, я в игрушка раньше заменял камеру… Я просто двигал все относительно экрана, это было очень трудно, приходилось много писать кода, а тут ваша камера)))) спасибо^_^