Это вторая часть урока. Начало тут.
Создаём пламя в AS3 кодом, который любезно предоставил Монстер.
Проверил работоспособность в Adobe Flash CS6 и в Adobe Animate CC 2017. Нормально! Разве что добавить сглаженности пламени.
1. Создаём на рабочем столе папку проекта с именем, скажем, "Plamya_AS3"
2. Создаём документ Action Script 3.0, нажимаем комбинацию клавиш Ctrl+Shift+S (или: Файл>Сохранить как..), даём название "Plamya_AS3" и !сохраняем в папке проекта!
3. Создаём файл AS3:( Файл>Создать>Файл Action Script )
[показать]
и прописываем в него код:
CODE
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author MOHCTEP
* @version:
* @created: 14.03.2017 14:35
* @description:
* Flame - Класс пламени свечи
*/
public class Flame extends Sprite {
/**
* Конструктор класса. Дожидается добавления на сцену.
*/
public function Flame() {
stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init);
}
/**** LISTENERS SECTION ****/
/**
* Сцена доступна - начинаем инсталляцию:
* Подписываемся на событие перехода по кадрам - Event.ENTER_FRAME
* и на событие завершения анимации будущих "частичек" пламени - Event.COMPLETE
* @param e - Event.ADDED_TO_STAGE
*/
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.REMOVED_FROM_STAGE, destroyer);
// entry point
addEventListener(Event.ENTER_FRAME, flameBurn);
addEventListener(Event.COMPLETE, removeBurn);
}
/**
* "Ежекадровая" процедура.
* "Добываем" из библиотеки 3 экземпляра "flame".
* Ставим, масштабируем и поворачиваем их немножко рандомно.
* И показываем, добавив в список отображения.
* @param e - Event.ENTER_FRAME
*/
private function flameBurn(e:Event):void {
var new_flame:MovieClip;
for (var i:int = 0; i < 3; i++) {
new_flame = new flame();
new_flame.x = Math.random()*2-1;
new_flame.rotation = 1 + Math.random() * 3 - 3;
new_flame.y = Math.random();
new_flame.alpha = Math.random() * 0.5 + 0.5;
new_flame.scaleX = .2 + Math.random() * .8;
new_flame.scaleY = .5 + Math.random() * .7;
addChild(new_flame);
}
}
/**
* Какой-то из ранее добавленных экземпляров пламени отчитался о завершении своей анимации.
* Удалим его из списка отображения.
* @param e - Event.COMPLETE
*/
private function removeBurn(e:Event):void {
removeChild(e.target as MovieClip);
}
/**
* Нас удалили со сцены.
* Отпишемся от всех, ранее назначенных, собвтий и почистим список отображения.
* @param e - Event.REMOVED_FROM_STAGE
*/
private function destroyer(e:Event):void {
removeEventListener(Event.REMOVED_FROM_STAGE, destroyer);
// remove all listeners, displayObjects, etc...
removeEventListener(Event.ENTER_FRAME, flameBurn);
removeEventListener(Event.COMPLETE, removeBurn);
while (numChildren) removeChildAt(0);
}
}
}
4. !Важно! Сохраняем Файл AS3 в папку проекта под именем Flame. Обязательно файл проекта Plamya_AS3.fla и файл Flame.as должны находится в одной папке!
5. Создаём в библиотеке мувик (Фрагмент ролика) flame ... повторяем все действия из поста №1 от пункта 1 до пункта 16 включительно, только код на 20-м кадре будет таким:
CODE
import flash.events.Event;
dispatchEvent(new Event(Event.COMPLETE,true));
stop();
//Остановим воспроизведение и рапортуем сцене о его завершении.
6. Вернёмся на монтажный кадр и в единственном кадре единственного слоя впишите код:
CODE
var fl:Flame = new Flame();
fl.x=274;
fl.y=216;
addChild(fl);
7. Нажмите Ctrl+Enter - должно проигрываться следующее:
В следующей части урока создадим подобие открытки
Вижу: интерес к теме по количеству скачиваний исходника и вложений есть.
Хотелось бы прочитать Ваши пожелания, замечания, дополнения в комментариях! Это же форум!
Исходник:
[показать] Plamya_AS3.rar ( 5,94 KB ) Кол-во скачиваний: 1
[показать] Безымянный_1.swf ( 1,96 KB ) Кол-во скачиваний: 32
[показать] PlamyaAS3_AF_CS6.swf ( 67,64 KB ) Кол-во скачиваний: 29