Эффект тряски

Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

Информация
Автор/переводчик: 
TeT

В этом уроке я покажу как сделать эффект тряски. Естественно, этот эффект сделан при помощи Action Script 3.0 . Так что запускайте ваш Adobe Flash и давайте приступим .

Создаем окружающую среду:

  1. Создайте новый Flash ActionScript 3.0 документ размером 300×300.
  2. Нарисуйте квадрат.
  3. Переконвертируйте квадрат в MovieClip (имя не важно, точка регистрации по центру).
  4. Поставьте галочку на export for ActionScript и в поле Class введите Rectangle.
  5. Удалите квадрат со сцены. Он будет добавлен с помощью кода

Переходим к ActionScript
Напишите следующее в первом кадре:

//Этот массив содержит все квадраты на сцене
var rectangles:Array = new Array();
 
//В этом цикле мы создадим 20 квадратов
for (var i = 0; i < 20; i++) {
 
	//Создание одного квадрата
	var rectangle:Rectangle = new Rectangle();
 
	//Устанавливаем случайные размеры квадрата, одинаковые по X и Y
	rectangle.scaleX = Math.random();
	rectangle.scaleY = rectangle.scaleX;
 
	//Устанавливаем случайное положение на сцене
	rectangle.x = Math.random() * stage.stageWidth;
	rectangle.y = Math.random() * stage.stageHeight;
 
	//Добавляем квадрат на сцену
	addChild (rectangle);
 
	//Добавляем квадрат в массив
	rectangles.push (rectangle);
}
 
//Таймер вызывает функцию "shakeRectangles" каждые 0.02 секунды
var timer:Timer = new Timer(20, 100000000);
timer.addEventListener (TimerEvent.TIMER, shakeRectangles);
timer.start ();
 
//Эта функция отвечает за анимацию
function shakeRectangles (e:Event):void {
 
	//Цикл, для обращения к элементам массива
	for (var i = 0; i < 20; i++) {
 
		//Поворачиваем квадрат случайным образом   (от -4 до 4) 
		rectangles[i].rotation += Math.random() * 8 - 4;
 
		//Устанавливаем новую случайную позицию
		rectangles[i].x += Math.random() * 8 - 4;
		rectangles[i].y += Math.random() * 8 - 4;
	}
}

Разве это было сложно? Так же можно поиграться со значениями и формами. Надеюсь, что вы многому научились из этого урока

Исходник: 

Впервые!

Если у вас было хоть раз желание сделать что-то новое и необычное, то этот видеокурс для вас! Знания ActionScript 3.0 вдохнут в ваши проекты новую жизнь, позволив тем самым поднять их на новый уровень

С помощью этого видеокурса вы пройдёте путь от новичка до Объектно-Ориентированного Программирования, сможете работать со многими популярными библиотеками и научитесь создавать сайты во flash! + Видеокурс по PaperVision3D в подарок!

Видеокурс содержит 119 видеоуроков в 12 главах. На сегодняшний день это единственный видеокурс, таких масштабов

Узнайте о других возможностях ActionScript 3.0

Похожие записи

Комментарии

Аватар пользователя Fly

спасибо, замечательный урок :)

1) Админ всегда прав
2) Если админ не прав, смотри пункт 1

Мы в контакте - http://vkontakte.ru/club9573247
Не отвечаю на вопросы в личку касаемо Flash, у нас для этого есть форум

Аватар пользователя SarGun

отлично!*good*

Аватар пользователя aidalexeyaid

а не лучше здесь var timer:Timer = new Timer(20, 100000000); было написать просто var timer:Timer = new Timer(20); ? Ведь через 100000000 повторений анимация прекратится Lol

Аватар пользователя megamonster

Ведь через 100000000 повторений анимация прекратится

aidalexeyaid, то есть через 23 дня? Да, может прекратится.*mda*
Но в том, что такая запись излишня, вы правы:

new Timer(20, 100000000)
Аватар пользователя mefisto777

Гениальный урок. :)
Мне кажется если человек не мог сам до такого догадаться, то ему лучше не лезть в программирование вообще. Да и, почему-бы не реализовать с помощью ENTER_FRAME? :)

Да и желательно в таких вещах вводить слежку за переключением окна/вкладки. Незачем грузить процессор, когда человек не смотрит эффект. Ведь если я переключу вкладку, то все так и будет потреблять ресурсы компьютера, хоть и в меньших масштабах. Доделай урок чуток. :)

А так молодец автор. :)

Аватар пользователя Fly

А так молодец автор. :)

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

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

1) Админ всегда прав
2) Если админ не прав, смотри пункт 1

Мы в контакте - http://vkontakte.ru/club9573247
Не отвечаю на вопросы в личку касаемо Flash, у нас для этого есть форум

Аватар пользователя megamonster

mefisto777, ставить проверки? В таком случае нужно эти проверки ставить в каждом уроке на этом сайте, в каждом контейнере каждого приложения. Потому, что: "а вдруг пользователь не смотрит...".
Замечание не к ТеТ, а к автору урока :)
Да, EnterFrame, пожалуй, здесь более уместный. Во первых: в FP11(или еще в 10-м это придумали, не помню), если пользователь не смотрит приложение - ентерфрейм прекращает свое выполнение для разгрузки процессора.
Во вторых: Если фреймрейт приложения будет 30 а не 50 - тик таймера будет выполнятся в 1.5 раза быстрее, при чем пользователь этих изменений не увидит, пока не перерисуется кадр, что тоже повлияет на производительность.

Аватар пользователя SarGun

если пользователь не смотрит приложение - ентерфрейм прекращает свое выполнение для разгрузки процессора.

не прекращает, а падает до 1 fps