Пришло время для другого Поста Редакторов ; шанс для вас озвучить ваши вопросы и получить исчерпывающий ответ от Майкла и меня. На этот раз Майкл уже ответил на несколько вопросов, оставшихся с прошлого раза …
Что я могу спросить?
Все, что вам нравится, но старайтесь держать его в рамках предмета, найденного на Activetuts +. Если у вас есть вопрос о Джастине Бибере, уходите.
Что делать, если вы не можете ответить на мой вопрос?
Не волнуйся, мы знаем людей. Мы сделаем все от нас зависящее, чтобы ответить на ваш вопрос!
Спрашивай!
Как только мы соберем подходящее количество вопросов, мы ответим на них и опубликуем результаты. Если на этот раз ваш вопрос не попадет в шорт-лист, очень скоро будет еще один пост с вопросом редакторов .
Sarvan
В: Не могли бы вы подсказать, как добавить кнопки «Нравится» и «Поделиться» в Facebook с AS3 или через Внешний интерфейс?
Майкл Джеймс Уильямс:
Эй, Сарван,
Хороший вопрос. API Graph Facebook очень глубокий; Я мог бы написать целую книгу об использовании ее с Flash ( и я не говорю метафорически ), но, к сожалению, она не включала бы полный метод добавления кнопки «Нравится» на Facebook.
Насколько я понимаю, Facebook не хочет, чтобы вы разрабатывали свои собственные кнопки «Мне нравится»; они хотят убедиться, что любая нажатая кнопка «Мне нравится» является официальной кнопкой «Мне нравится» на Facebook. Это понятно, но разочаровывает, если вы являетесь разработчиком Flash, потому что это означает, что нет простого способа получить кнопку «Нравится» в вашей RIA или игре.
Умные ребята на byHook.com нашли способ обойти это — хотя и с некоторыми ограничениями — ознакомьтесь с их полным методом (и предысторией) на Facebook Like Button во Flash: Повесть о сломанных мечтах и замученных душах .
С тех пор Facebook стал более снисходительным в отношении лайков; Теперь вы можете создать кнопку « /OBJECT_ID/likes
для постов, комментариев и фотографий (но не, скажем, страниц), используя Graph API, опубликовав запрос Graph в /OBJECT_ID/likes
. Это включает в себя вход пользователя в Facebook через ваш SWF, что, в свою очередь, означает регистрацию вашего SWF в качестве приложения на Facebook и настройку токенов аутентификации и всякого рода вещей, которые я не могу здесь осветить. Но это должно работать.
Другая альтернатива, которую, как я видел, используют люди, — это создать элемент div, содержащий кнопку «Мне нравится», отображаемую в JavaScript, как позволяет Facebook , и (в соответствующее время) поместить элемент div над SWF на вашей HTML-странице, чтобы он выглядел как часть SWF. Это довольно запутанный, хотя.
Подделка функциональности кнопки «Поделиться» намного проще; Graph API упрощает публикацию на собственной стене пользователя, отправляя запрос Graph в /me/feed
— хотя, опять же, вам нужно заставить их войти в систему через SWF и настроить токены аутентификации и все такое прочее.
Амир Хамид
QКак я могу прокручивать видео назад и вперед, перемещая мышь слева направо на сцене, а не перетаскивая через панель поиска?
Майкл Джеймс Уильямс:
Привет, Амир!
Я собираюсь предположить, что вы используете объект NetStream для потоковой передачи реального видео и подключаете его к объекту Video , который находится в списке отображения, чтобы показать канал, поэтому ваш код выглядит примерно так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
public var vid:Video = new Video();
public var ns:NetStream;
public var nc:NetConnection = new NetConnection();
public function init():void
{
addChild(vid);
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
}
public function onNetStatus(event:NetStatusEvent):void
{
if (event.info.code == «NetConnection.Connect.Success»)
{
ns = new NetSream(nc);
video.attachNetStream(nc);
stream.play(«http://example.com/videoName.flv»);
}
}
|
Я уверен, что у вас сложнее, но это пересекает основную идею.
Чтобы выяснить, насколько далеко находится мышь, мы можем использовать свойство stageX
любого MouseEvent и свойство stageWidth
сцены, например:
1
2
3
4
5
6
7
8
|
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
//…
public function onMouseMove(event:MouseEvent):void
{
var fraction:Number = event.stageX / stage.stageWidth;
}
|
Если мышь находится на полпути через сцену, fraction
будет 0,5; если это крайний левый, fraction
будет 0; и если это крайний правый, fraction
будет 1.
Теперь мы можем использовать метод NetStream.seek()
для перехода к определенному количеству секунд видео или, по крайней мере, приблизительно к этой точке; это фактически переходит к ближайшему ключевому кадру в видео до этого количества секунд, и ключевые кадры обычно разбиваются на 10-50 кадров. Так что, если бы мы знали общую длину видео, мы могли бы сделать это:
1
2
3
4
5
|
public function onMouseMove(event:MouseEvent):void
{
var fraction:Number = event.stageX / stage.stageWidth;
ns.seek(fraction * totalLengthOfVideo);
}
|
(Примечание. С помощью этого кода нам нужно добавить прослушиватель MouseEvent после загрузки видео, иначе возникнут проблемы.)
К сожалению, нет свойства ns.length
которое сообщает нам длину видео. Но мы можем получить длину через metadata
потока.
Перед вызовом NetStream.play()
мы должны добавить функцию обработчика событий, которая будет запускаться, когда сервер видео отправляет описательную информацию — метаданные — о видео:
01
02
03
04
05
06
07
08
09
10
|
public function onNetStatus(event:NetStatusEvent):void
{
if (event.info.code == «NetConnection.Connect.Success»)
{
ns = new NetSream(nc);
ns.onMetaData = onReceiveMetaData;
video.attachNetStream(nc);
stream.play(«http://example.com/videoName.flv»);
}
}
|
В этой функции-обработчике мы присвоим свойство duration
метаданных переменной, к которой мы можем обратиться позже:
1
2
3
4
5
6
7
8
|
public var totalLengthOfVideo:Number;
//…
public function onReceiveMetaData(theMetaData:Object)
{
totalLengthOfVideo = theMetaData.duration;
}
|
И вот оно! Код нужно немного привести в порядок, но там есть все, что вам нужно 🙂
Praveen
Q Я хочу учебники по 2D анимации, пожалуйста!
Майкл Джеймс Уильямс:
Отметил;) Мы будем работать над тем, чтобы получить больше таких на сайте. (Если кто-то читает какие-то безумные анимационные навыки, которыми он хочет поделиться, свяжитесь с нами !)
А пока посмотрите некоторые уроки анимации из наших архивов:
Плавно анимируйте карикатуру, используя анимацию движения
Quick Basix: случайное анимированное мигание
Анимация непрерывного цикла Quad Run с Flash
Анимируйте акробатического шпиона, используя временную шкалу Flash
… а если хочешь перейти на Премиум