23 декабря 2010 г.

Action Script 3. Урок 1. Основы action script. EnterFrame.

Итак, начнем с самого основного -  небольшое вступление, теория, пара примеров.

Action Script с течением времени все больше приближался к таким серьезным языкам программирования, как C, Java и т.п. AS 3 - это последний, наиболее качественный, производительный язык среди других версий AS. С его помощью создается большинство приложений и игр в среде Flash, чему будет посвящена серия уроков в этом блоге.

Основные методы программирования на as3 - функции и события, классы и объекты. Функции - это то, что выполняется. События - это то, при каких условиях выполняется та или иная функция.
Еще есть слушатели событий - это средства, которые "соединяют" функции и события.



Но, впрочем, теория не так важна, все познается в примерах, лично для меня было легче воспринимать все, опираясь на примеры.
Откроем любую IDE, т.е. средство разработки приложений, поддерживающую As3, я использую Adobe Flash CS4.

Урок 1. Событие EnterFrame.

Сейчас попробуем написать простейшую программку, например, осуществление простого движения объекта (кто знаком с as2, особых сложностей не вызовет).

1. Открываем новый документ AS3 и рисуем любой объект, например прямоугольник.

2. Обращаем его в мувиклип клавишей F8,  называем и жмем "ОК".

Затем даем ему новое Instance Name, например box.

3. Теперь создаем новый слой под названием actions - туда мы будем вписывать весь код, сейчас и в последующие уроки. Это нужно для того, чтобы если код будет достаточно длинным, можно было легче найти ту или иную часть кода. На этом новом слое открываем панель "Actions" (F9) и вписываем следующий код:

stage.addEventListener(Event.ENTER_FRAME, moveF);
function moveF(e:Event):void {
box.x += 2;
}

Теперь протестируем ролик (Ctrl+Enter).
Ура, все работает. А теперь разберемся, что мы написали, по порядку.

stage.addEventListener(Event.ENTER_FRAME, moveF)  - в этой строчке мы объявляем слушатель событий, который будет "привязан" к данной сцене, stage. Далее смотрим свойства (то, что в скобках)  - функции могут быть заданы разными видами событий - события мыши, клавиатуры, а в данном случае это событие Enterframe, то есть действия функции будут совершаться при переходе на каждый  новый кадр нашей сцены. Причем частоту перехода  можно регулировать вот здесь, в нижней части Timeline:

Через запятую мы объявляем название будущей функции, осуществляющей наше движение, название может быть любым, главное, чтобы оно не совпадало с каким-нибудь оператором.

Перейдем дальше. Следующая строкой ключевым словом function, как можно догадаться, мы объявляем саму функцию и указываем ее имя, которые мы раньше обозначили в свойствах слушателя событий. После имени в скобках указываем переменную, которая указывает принадлежность функции, в данном случае мы указываем тип Event, такой же, как и в свойствах слушателя ранее. И после скобок необходимо указать тип функции, то есть обозначить, что она будет возвращать. Мы указали тип void, потому что наша функция не возвращает никаких значений, только изменяет уже существующие параметры. Чтобы объявить начало тела функции, нужно открыть фигурную скобку.

И наконец, в теле функции мы указываем само действие, в нашем случае это движение объекта вправо, то есть по оси Х. Для этого мы указываем имя объекта (его instance name) и параметр - х, увеличивая его на 2. Все, все действия в функции закончены, поэтому закроем фигурную скобку.

Итак, в этих строчках я показал использование простейшего, однако одной из самых важных видов событий - enterframe.

Домашнее задание:

Осуществить движение объекта по диагонали.
а) В одну сторону;
б) В обратную сторону.


Всем спасибо, урок окончен. Решение домашнего задания будет в следующем уроке, а оно достаточно легкое :).

7 коммент.:

ruf комментирует...

ух ты!!! вот так урок! спасибо громадное!!! все легко и понятно!
Мука уже устал читать... ничего не понимаю... а тут все ясно и интересно)) даже Д.З. сделал))) во все 4 стороны его по пулял по диагонали))) x += 2 это упрощенно от х = х+2 так? а е: это сокращенно от Event: правильно я понимаю? это конечно может быть и не важно, но мне так проще понять вникая в смысл.

Cyber комментирует...

Спасибо за отзыв :). Да, это равнозначные записи.

GadjievAlex комментирует...

вопрос в чём разница между e target и this

где лучше использовать каждый вариант и чем руководствоваться при выборе

Igorian комментирует...

Здравствуйте, у меня есть вопрос по ENTER_FRAME
Возьмем такой вариант, что я создал кнопку, которая при помощи ENTER_FRAME после того, как я подведу мышку, крутит ее вокруг своей оси. А проблема заключается в следующем - Когда я подвожу указатель мышки второй раз, скорость кручения кнопки увеличивается в два раза. И так далее и так далее... Получается, что, если навести на кнопку мышку раз 20, то скорость увеличивается до такой степени, что даже не видно, как кнопка крутится. Кто-нибудь может мне подсказать, что делать в этом случае? Я уже все проверил и думаю, что проблема заключается в какой-нить особенности ENTER_FRAME. МОжет я ошибаюсь... Подскажите, плз...

Cyber комментирует...

Igorian,
При наведении вы увеличиваете скорость, или устанавливаете сразу увеличенную?

Создайте какую-нибудь переменную, которая будет содержать скорость кручения. Затем при наведении увеличивайте скорость на значение этой переменной, а при отведении (событие MOUSE_OUT) — возвращайте до нормальной скорости кручения.

Igorian комментирует...

Cyber,
Я вот так и делаю. Я создаю переменную-счетчик, которую потом возвращаю в ноль. Но все-равно скорость не сбивается. Может быть прислать код?

Cyber комментирует...

Igorian,
Присылайте на cyber@nxt.ru

Отправить комментарий