18 февр. 2011 г.

Смена указателя мыши во флеше

Здравствуйте, давайте рассмотрим, как сделать свой указатель во флеше. Основной принцип заключается в том, что мы скрываем указатель мыши windows в рамках нашей флешки и цепляем
к нему нарисованный нами movie clip.

Первым делом, создайте в библиотеке Movie Clip (Ctrl+F8) и назовите его cursor. Учтите, что "острие" курсора должно совпадать с центром (перекрестием) клипа. Затем, вы должны "расшарить" его имя для actionscripta. Для этого найдите в библиотеке (Ctrl+L) созданный курсор, нажмите на него правой кнопкой и в контекстном меню выберите Свойства. В появившемся окне, нажмите кнопку дополнительно, и поставьте галочку на пункте "Экспортировать для ActionScript" и ставим идентификатор одинаковый с именем клипа, как это показано на скриншоте.



Далее следует написание кода. На основной сцене, в необходимом кадре, напишите следующий код:

//Прячем старый указатель
Mouse.hide();
//Атачим на сцену новый курсор, координаты которого равны текущим координатам курсора мыши
this.attachMovie('cursor','cursor',0,_x=mouse._x,_y=mouse._y);
//Начинаем перетаскивать курсор
cursor.startDrag(true)

17 февр. 2011 г.

Пособия по изучению Flash

Здравствуйте, сегодня я хочу поговорить о материалах для изучения Флеша. Условно, их можно поделить на н типов:
  • Оффициальные мануалы
  • Учебники
  • Видеоуроки
  • Форумы с онлайн уроками
 Оффициальные мануалы от Adobe не отличаются доступностью и простотой, так что начинающим флешерам нет резона начинать с них. Но для опытных программистов, разобраться
в них не составит большого труда. Большинство можно найти по этой ссылке
 А вот учебники это более надежный способ научиться. Я встречал два вида учебников: первые обучали самим основам (рисование, анимирование и т.д.), а вторые - программированию на actionscript. Насчет учебников первого типа тяжело что-либо посоветовать, так как все они практически одинаково хороши. А вот к выбору учебников программирования я бы подошел более ответственно. Когда я изучал AS2.0, я пользовался учебником Дмитрия Гурского "ActionScript 2 -Программирование во Flash MX", - очень последовательный и доходчивый материал так, что даже при весьма посредственных познаниях в программировании, легко можно его освоить.
 Относительно недавно я начал освоение AS3.0. После долгих поисков литературы, я пришел к выводу, что единственная достойная книга - это "ActionScript 3.0 для Flash", Колин Мук. Пока что могу сказать, что третья версия actionscripta гораздо сложнее второй версии (что компенсируется более широкими возможностями), так что на его освоение понадобиться немного больше времени.
 Что касается он-лайн уроков, то тут все зависит от ваших способностей  к поиску и в формулировании ваших мыслей в адекватный поисковый запрос. Мне очень понравился сайт/форум demiart.ru , куда и вам советую заглянуть.



15 февр. 2011 г.

Adobe Apollo





Для меня было большим открытием, когда я узнал о данном продукте. Для flash'a и соответственно actionscript'a это станет большим прорывом. Вот, решил поделиться с вами сведениями об этой разработке.

Apollo - это среда, позволяющая веб-разработчикам использовать свои познания во Flash, Flex, HTML, JavaScript и Ajax для построения веб-приложений, которые работают за пределами браузера и взаимодействуют непосредственно с десктопом пользователя.

Пока была представлена лишь альфа-версия продукта, однако разработчики могут ознакомиться с SDK (Software Developer’s Kit). Apollo не будет зависеть от операционной системы пользователя. Уже сейчас поддерживаются Windows (Windows XP SP2 и Vista Home premium edition) и Macintosh (Mac OSX 10.4). В будущем обещана версия и для Linux (однако будет это не очень скоро - даже в версии Apollo 1.0 не будет поддержки Линукса).

Если говорить не техническим языком, то Apollo предоставляет доступ к веб-приложениям без необходимости запускать браузер. Если в данный момент времени пользователь отключён от Сети, он может продолжать свободно работать с программой. Затем, когда появиться коннект, данные будут синхронизированы.

Если ознакомится со списком возможностей альфа-версии Apollo, а также с тем, что запланировано в Apollo 1.0 (онлайновый и офлайновый режимы работы, возможность регистрации расширений файла, полный контроль над контекстным меню, поддержка drag-n-drop и PDF), можно представить потенциал продукта. Пользователю для работы с приложениями Apollo потребуется загрузить Apollo runtime, который будет весить 5-9 Мб. Делать это нужно будет только один раз.

Майкл Аррингтон, автор самого популярного блога о Web2.0, считает, что благодаря Apollo появиться целый новый класс компаний, которые смогут строить приложения на этой платформе. Поживем увидим.

Ссылки по теме:
ApolloRuntime(6Mb под Windows и 8Mb под Мак)
Apollo SDK(18mb)
Расширение Apollo для FlexBuilder
Документация к Appolo(33mb)

FPS счетчик

К сожалению, ни одна версия actionscript'a не предусматривает возможность
создания счетчика кадров в секунду. Но, его очень просто можно сделать "вручную"
таким образом:

onClipEvent (enterFrame) {
t = getTimer();
framerate = Math.round(1000/(t-o));
o = t;
}

Переменная framerate будет нам говорить текущий fps. Затем её можно просматривать
через функцию trace:
trace (framerate);
Либо, создать динамическое текстовое поле, и отображать fps через него:
text_field.text = "FPS: " + framerate();

Box2D Engine

Физика на Flash. Box2D Engine

Быстрый, удобный и мощный физический движок с открытым исходным кодом. Под катом — ссылки, небольшой туториал и пример использования.


Ссылки

Сам проект Box2D находится по этому адресу — http://www.box2d.org/, там можно почитать о его возможностях, пообщаться на форуме и т.д.
С него был сделан AS3 порт, домашняя страница — http://box2dflash.sourceforge.net/. На ней выложен клип, показывающий возможности этого движка.

Использование (самое базовое)

1. Создаём «мир», все расчёты происходят только в пределах этого мира, объект, выходящий за его границы, выпадает из расчётов. Так что делаем с запасом (WIDTH и HEIGHT — размеры окна):

// world bounding box
var worldAABB : b2AABB = new b2AABB();
worldAABB.lowerBound.Set(-WIDTH, -HEIGHT);
worldAABB.upperBound.Set(2*WIDTH, 2*HEIGHT);

// create world. zero gravity + use "sleeping" for objects
m_world = new b2World(worldAABB, b2Vec2.Make(0, 0), true);

2. Добавляем объект в мир.
Объект характеризуется двумя составляющими.
Первая — геометрическое представление объекта (его «поверхность»). Каждый объект может состоять из нескольких shape, которые представляют собой выпуклые многоугольники или окружности (но ничего не мешает расширить базовый shape и написать свой собственный).
Здесь же задаётся плотность, сила трения и т.д.

// shape definition
var bodyShapeDef : b2PolygonDef = new b2PolygonDef();
// as rectangle
bodyShapeDef.SetAsBox(w/2, h/2);
// density
bodyShapeDef.density = 1.0;
// friction
bodyShapeDef.friction = 0.3;

Вторая — сам объект, его положение, масса, момент инерции и т.д.
Описание объекта:

// object definition
var bodyDef : b2BodyDef = new b2BodyDef();
// world position
bodyDef.position.Set(xc, yc);
// linear "friction with world"
bodyDef.linearDamping = 0.3;
// angular "friction with world"
bodyDef.angularDamping = 0.3;

Создание объекта (он автоматически регистрируется в мире). Задание ему ранее созданного геометрического представления, и (очень удобно) автоматический расчёт всех физических параметров на основе его плотности и формы.

// create object from definition
var body : b2Body = m_world.CreateBody(bodyDef);
// create object shape from shape definition
body.CreateShape(bodyShapeDef);
// calculate mass, center of mass and inertia
// based on shape
body.SetMassFromShapes();

Есть ещё третья (необязательная) составляющая объекта — его представление на экране. На начальных этапах разработки можно воспользоваться классом b2DebugDraw, который показывает все объекты, связи между ними и т.д. Но как связать, к примеру собственный MovieClip и физический объект?
Самая часто используемая практика — воспользоваться полем userData созданного объекта.
Запоминаем экранное представление в этом поле:

// save screen object in userData field
body.SetUserData(bodyDisplayObject);

3. Эмуляция
Тут всё просто. У мира есть функция Step, которая принимает время шага в миллисекундах секундах и кол-во итераций, которые надо проделать на этом шаге. После эмуляции проходим по всем объектам мира, смотрим, если поле userData содержит экранное представление — то обновляем положение/вращение этого представления в соответствии с полями физического объекта.

// calculate physics
// using 10 steps of physics for each frame
m_world.Step(dt, 10);

// loop for all physic objects
for(var body : b2Body = m_world.GetBodyList(); body; body = body.GetNext())
{
// if userData is not a shape, then skip this object
if(!(body.GetUserData() is Shape))
continue;

// update screen object to be equal physical object
body.GetUserData().x = body.GetPosition().x;
body.GetUserData().y = body.GetPosition().y;
body.GetUserData().rotation = body.GetAngle() * 180.0 / Math.PI;
}
____________________

Пример можно увидеть здесь: http://www.rexxar.ru/snake/