Сижу тут делаю свою игру и дошел до такой стадии, что смотрю в монитор и ничего понять не могу, игра ни то живая, ни то нет.
И потом дошло - здания стоят, а у них дым застыл
Стал я копаться, как же его запустить то … и запустил
Попробуем на простом примере.
1. Откроем Flash (у меня CS5.5)
2. Создадим новый документ Action Script 3.0
3. Вставим туда какую-нибудь картинку дома с трубой
4. Создадим новый документ Action Script 3.0 Class
5. Вставим туда следующий код (сохраним как Smoke.as)
Код: Выделить всё
package { import flash.display.*; import flash.events.*; import flash.filters.*; import flash.utils.*; /** * ... * @author Maksim Naumov */ public class Smoke extends Sprite { // Родительский контейнер для дыма private var smokeMC: MovieClip = new MovieClip(); // Цвет дыма private var color: uint; // Радиус частичек дыма private var puffRadius: Number = 1; // Фильтр размытости для дыма private var puffBlur:BlurFilter = new BlurFilter(8, 8, 2); // Количество частичек дыма private var puffCount: Number = 40; // Таймер private var timer: Timer = new Timer(100); // -------------------------------------------------------------------------- public function Smoke(x: Number, y: Number, _color: uint, _count: Number = 40) { smokeMC.x = x; smokeMC.y = y; addChild(smokeMC); // Цвет дыма color = _color; // Кол-во частичек puffCount = _count; timer.start(); timer.addEventListener(TimerEvent.TIMER, startSmoke); } // -------------------------------------------------------------------------- private function startSmoke(event: TimerEvent) : void { // Если количество частичек больше чем задано if (smokeMC.numChildren > puffCount) { timer.stop(); timer.removeEventListener(TimerEvent.TIMER, startSmoke); } smokeMC.addChild(smokePuffss()); } // -------------------------------------------------------------------------- private function smokePuffss() : Sprite { var smokePuff: Sprite = new Sprite(); // Случайная позиция от -2 до +2 var randX: Number = -2 + Math.random() * 4; // Рисуем smokePuff.graphics.beginFill(color); smokePuff.graphics.drawCircle(randX, 0, puffRadius); smokePuff.graphics.endFill(); // Применяем фильтр размытия smokePuff.filters = [puffBlur]; smokePuff.addEventListener(Event.ENTER_FRAME, moveUp); return smokePuff; } // -------------------------------------------------------------------------- private function moveUp(event: Event) : void { // Если частичка дыма видна if (event.currentTarget.alpha > 0) { // Вверх event.currentTarget.y -= 1; // Вширь event.currentTarget.width += 0.5; // Ввысь event.currentTarget.height += 0.3; // Прозрачность event.currentTarget.alpha -= .004; } else { // Если частица невидимая, Y = 0 , X - не менять или 0, ширину и высоту - оригинальномая, а альфу = 1 event.currentTarget.y = 0; event.currentTarget.width = puffRadius; event.currentTarget.height = puffRadius; event.currentTarget.alpha = 1; } } // -------------------------------------------------------------------------- }}
7. В открывшемся окне вставляем этот код (первые 2 значения координаты я их выяснил опытным путем, у вас будут свои)
Код: Выделить всё
import Smoke; var smoke: Smoke = new Smoke(230, 130, 0xBBBBBB); addChild(smoke);
Исходник качаем здесь http://some-one.ru/smoke_test/smoke_test.zip
Вопросы наверно здесь можно задать ...
Спасибо за внимание