ActionScript 3.0 или «От «Hello world» к программной анимации»


Привет! Сегодня я познакомлю вас с языком среды Flash - ActionScript, будем рассматривать 3ю версюю языка, так как даже 2я уже считается устаревшей. Приступим.Для начала обзаведемся справочными материалами - официальным руководством, а также  "библией ActionScript 3.0"-книгой Колина Мука - "ActionScript 3.0 для Flash". Итак приступим. По сложившейся традиции программистов всех времен и народов мы сначала выведем на экран надпись "Hello world!". У начавших знакомство со средой разработки (я использую Flash CS5) возникнет дельный вопрос, куда писать код скрипта? Давайте откроем для начала проект из прошлого урока:

Для начала создадим слой с помощью кнопки New Layer:

Появиться новый слой New Layer 2, кликните 2 раза на названии слоя и переименуйте его в Scripts, а слой Layer 1 переименуйте в main:

Зачем мы это сделали? Дело в том что скрипт можно писать в любом слое и в любом кадре, но лучше сделать специальный слой для скриптов, что мы и проделали. В реальности же делается множество слоев, в которых храниться фон, движимые объекты, меню и т. д. Отвлекся... Выделите слой Scripts, кликнув на него. Теперь выделите первый кадр в слое, кликнув на нем на шкале кадров. А теперь нажмите кнопку Actions:

Все эти действия означают: выделить первый кадр в слое Scripts для написания кода скрипта. Просто, не правда ли? В открывшемся окне напишем следующий код:

trace('Hello world!');

Теперь нажимаем Ctrl+Enter и смотрим что получилось: Обратите внимание на окно вывода, вот наши заветные слова "Hello world!". Но почему их так много? Дело в том, что кадры идут один за другим, а после последнего осуществляется переход к первому. Что же делать? Останавливать воспроизведение, что мы и сделаем: Анимации нет, но нет и постоянного вывода фразы "Hello world!". Почему?! Дело в том, что функция stop останавливает воспроизведение вообще. Теперь удалим лишние кадры - все, кроме первого. Чтобы удалить кадр необходимо щелкнуть на нем правой кнопкой и выбрать в меню команду Remove frames, можно также предварительно выделить кадры в слоях и удалить их "массово": Остался только один кадр, но не беда, мы его оживим программно, а как делать анимацию фона, рассмотрим в следующем уроке. Как будем оживлять? Давайте подвигаем наш шар по оси X, но с тем условием, что мы будем менять направление всякий раз когда X превысит 600 или будет меньше 40. Поехали?) Для начало нам надо задать имя экземпляра - имя, к которому мы сможем обращаться в коде скрипта, для начала давайте конвертируем наш объект. Кликните правой кнопкой на объекте и выберете команду с Convert To Symbol...: Заполните поля указанные на рисунке ниже и нажмите ОК: Теперь откройте вкладку Properties, выбрав клип на вкладке Library и в поле с надписью <Instance Name> введите название экземпляра, у меня это ball: Теперь наконец-то можно заняться программной анимацией. Выделяйте первый кадр слоя Scripts, стирайте trace('Hello world!'); и пишите:

import flash.events.Event; //Загрузим класс для работы с событиями

stop(); //останавливаем воспроизведение
var x_direction=1; //задаем приращение
stage.addEventListener(Event.ENTER_FRAME,moveByX);//добавляем обработчик события кадра
function moveByX(e:Event){
	ball.x+=x_direction;//добавляем приращение к координате x
	if (ball.x>600 || ball.x<40) //если вышли за верхний или нижний предел,
		x_direction*=-1; //меняем направление
}

Я специально подробно закомментировал код, чтобы вам было понятней. Подробней о том, как работают события, расскажу в одном из следующих уроков, а сейчас давайте нажмем Ctrl+Enter:

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

import flash.events.Event;

stop();
var x_direction=1;
var y_direction=2;

stage.addEventListener(Event.ENTER_FRAME,moveObject);

function moveObject(e:Event){
	moveByX();
	moveByY();
}
function moveByX(){
	ball.x+=x_direction;
	if (ball.x>600 || ball.x<40)
		x_direction*=-1;
}

function moveByY(){
	ball.y+=y_direction;
	if (ball.y>440 || ball.y<40)
		y_direction*=-1;
}

В следующих статьях мы будем подробнее разбирать синтаксис и особенности языка ActionScript 3.0. До новых встреч.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *