PDA

Просмотр полной версии : дым. Максимально реалистичный...


DCat
02.03.2006, 18:59
http://www.betaruce.com/flash_swf/smoke_3.swf
Как сделать что-нибудь подобное...
Поделитесь уроком плиз... =)

inspace
02.03.2006, 19:41
Похоже на кучу круглых градиентных мувиков с меняющимися альфами + фильтры. Движение и радиусы рандомно похоже делается... Мне так кажется.

aksios
02.03.2006, 23:06
Похоже на кучу круглых градиентных мувиков с меняющимися альфами + фильтры. Движение и радиусы рандомно похоже делается... Мне так кажется.
Да да у меня есть этот компонент - все как раз как ты сказал :D

DCat
03.03.2006, 00:31
Нет там фильтров... только альфа... и AS...
Дайте плиз у кого есть исходник такого безобразия... желательно с комментами... я конечно могу попытаться с этим разобраться, но если кто-нибудь посодействует в разбирательстве буду оч.признателен...

inspace
03.03.2006, 00:50
Я честно не представляю, как можно создавать белые объекты без фильтра.

DCat
03.03.2006, 02:41
Какие белые объекты?
Дым чтоли?

Этот дым состоит из кружков с радиальным градиентом... которые аттачатся через attachMovie... (по крайней мере это было бы правильней)
И красные тоже там есть...

Я в программировании не силен, к сожалению... навыки у меня есть, но их недостаточно... Сказать как сделано могу, но написать это врядли осилю =(
осилю, но на это уйдет масса времени... =((

Есть замечательный кружечек с радиальным градиентом... я надеюсь все себе представляют его... (альфа в центре 100%, к краю снижается до 0%)
Его надо размножить и из одной точки разводить в разные стороны, так, чтобы он расходился к верху на угол, скажем, 30°... (это в принципе включает в себя их увеличение/трансформацию, но ее будет не достаточно)
Вот как сделать это?
Как сделать так, чтобы этих кружечков было море и они абсолютно рандово совершали свое движение вверх?
Естетсвенно и альфу нужно менять в пределах от 100 до 0 по мере возвышения... (рассеивание дыма)...

Было бы неплохо, если бы дым еще двигался не по прямой, а по синусоиде...
в примере он движется не прямо вверх, а немного по кривой...

Вот как?

inspace
03.03.2006, 05:17
1) "Этот дым состоит из кружков с радиальным градиентом"
Может LCD монитор мне так показывает, но у дыма есть прожилочки. Это действие фильтра.
2) "я надеюсь все себе представляют его" И не только это представляют ;)
3) Создаешь функцию которая каждые N секунд аттачит мувики на сцену и передаёт этим мувикам параметры(скажем начальные радиусы) Три мувика - это потому что там кажется три вида мувиков: два красных одын белый. При каждом вызове функции уменьшаешь альфа и меняешь координату на DX = 2-4*Math.random. В данном случае 2 амплитуда. Когда альфа становится у мувика меньше нуля, уничтожаешь мувик, таким образом не плодишь клипы на сцене.
4) Было бы неплохо, если бы дым еще двигался не по прямой, а по синусоиде...
Ага, а ещё неплохо было бы турбулентности сделать ;)

inspace
03.03.2006, 05:19
Забыл. ещё уменьшаешь радиус =) Вообще задача не такая сложная как ты думаешь.

DCat
03.03.2006, 07:40
пример-то есть?

Потому что мои эксперименты привели к тому что в отдельной сцене все работает... перевожу все это в MC другой сцены - не работает (по крайней мере я не вижу этих кругляшей приаттаченых)... Надо сделать дым из труб... был бы пример... хотябы простой... было бы проще понять как его строить =(
Разбор дыма из примера в принципе дает понимание того, что надо сделать, но оно не работает в MC...
А я хочу собственный дым, чтобы не тырить ни у кого и не брать готовых... я хочу понять как люди это делают... поэтому и прошу пример =(

1) прожилки?
Там клубы круглые и овальные... кружки трансформируются еще +ом...

AxelRB
03.03.2006, 08:42
А если вместо радиальных кружочков сделать битмап альфеный (фотошопное облако) и при движении его вращать, то будет вообще зашибись. Я так облака делал - выглядит ох-но. Правда тормоза были такие... 2-5 fps не больше показывало :((

veterok4
03.03.2006, 09:22
http://www.betaruce.com/flash_swf/smoke_3.swf
Как сделать что-нибудь подобное...
Поделитесь уроком плиз... =)


Эх, народ нонче пошёл не пуганный декомпилером:)...
Спокойенько бы всё это дельце "заграббил"... и таскал от туда код...

DCat
03.03.2006, 10:07
А если вместо радиальных кружочков сделать битмап альфеный (фотошопное облако) и при движении его вращать, то будет вообще зашибись. Я так облака делал - выглядит ох-но. Правда тормоза были такие... 2-5 fps не больше показывало :((

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


> Эх, народ нонче пошёл не пуганный декомпилером
А чего его бояться-то? К тому же декомпилер был практически всегда...
Меня до сих пор удивляет народ, который решает проблему закрытости кода HTML =))
Будто бы там невероятные открытия какие-то делают =)))
1. Кому надо тот уже давно посмотрел что там и как...
2. тупо копировать то, что уже сделано кем-то для других целей... в моей задаче нужен дым, но немного другой (угол нужно поменять наклона + интенсивность) поэтому я и хочу разобраться как делать... а не тупо брать заготовку...
К тому же заготовка не работает в MClip'е... в главной сцене работает при этом нормально...

kayama
03.03.2006, 11:09
Заходишь сюда (www.actionscript.org) и ищеш "steem" или "steam" в разделе movies/actionscript.

DCat
04.03.2006, 16:08
Интересно, каким это образом Steam, когда мне нужен Smoke =)

CREDO
04.03.2006, 18:06
вот неплохо сделанно

CREDO
04.03.2006, 18:09
function createSmoke () {
mc = attachMovie ("smoke","smoke" + (++d),d)
mc._x = Stage.width / 2
mc._y = Stage.height
mc._alpha = 0
mc._xscale = Math.random() * 70
mc._yscale = Math.random() * 70
mc.vx = 0
mc.vy = Math.random() * 5 + 5
mc.isFadingIn = true
mc.fadeInRate = Math.random() * 5 + 5
mc.fadeOutRate = Math.random() * 5 + 5
mc.fadeInGoal = Math.random() * 50 + 50
mc.XscaleRate = Math.random() * 5 + 5
mc.YscaleRate = Math.random() * 5 + 5
mc.scaleGoal = Math.random() * 80 + 20
mc.onEnterFrame = smoke
}
function smoke () {
this.vx = this.vx + vwind
this._x = this._x + this.vx
this._y = this._y - this.vy
if (this.isFadingIn) {
this._alpha = this._alpha + this.fadeInRate
this._alpha >= this.fadeInGoal ? (this.isFadingIn = false) : null
} else {
this._alpha = this._alpha - this.fadeOutRate
this._alpha <= 0 ? undefined undefined : null
}
this._rotation = Math.atan2(this.vy,this.vx) * 180 / Math.PI
this._xscale = this._xscale + this.XscaleRate
this._yscale = this._yscale + this.YscaleRate
}
function createFire () {
mc = attachMovie ("fire" + random(2),"fire" + (++d),d)
mc._alpha = Math.random() * 100
mc._x = Stage.width / 2
mc._y = Stage.height
mc._xscale = mc._yscale = Math.random() * 50 + 30
mc.vx = 0
mc.tx = mc._x + Math.random() * 20 - 10
mc.vy = Math.random() * 5 + 12
mc.scaleIn = true
mc.scaleRate = Math.random() * 5 + 7
mc.scaleGoal = Math.random() * 50 + 50
mc.onEnterFrame = fire
}
function fire () {
this.tx = this.tx + vwind * 8
this.vx = this.vx + (this.tx - this._x) * k
this._x = this._x + this.vx
this._y = this._y - (this.vy = this.vy - g)
this._rotation = Math.atan2(this.vy,this.vx) * 180 / Math.PI
this._xscale = this._xscale + this.scaleRate
this._yscale = this._yscale + this.scaleRate
if (this.scaleIn) {
if (this._xscale >= this.scaleGoal) {
this.scaleIn = false
this.scaleRate = this.scaleRate * -1
}
}
else if (this._xscale <= 0) {
removeMovieClip(this)
}
}
setInterval (createSmoke,20)
setInterval (createFire,0)
setProperty ("",_quality,"LOW")
vwind = -0.3
g = 0.8
k = 0.1

DCat
05.03.2006, 01:43
CREDO
Спасибо за пример =)

В коде не было необходимости... он у меня есть... уже давно расковырял этот дым... Только вот не знаю как его запихнуть в МСlip... запихнул, а он не работает =))

А строка this._alpha <= 0 ? undefined undefined : null
выдает ошибку... =)

KUZEN
05.03.2006, 01:51
Код пихается в первый кадр рута ... а вообще для начала не мешалобы с азами разобраться, что бы не задавать глупых вопросов ...

DCat
05.03.2006, 02:08
В чем конкретно заключается глупость моих вопросов?
с какими азами мне необходимо разобраться? =/

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

Если никто кроме CREDO не может помочь примерами закрывайте тему... достойнее дыма в моем примере я пока не встречал... =(

KUZEN
05.03.2006, 02:15
В том то и глупость, что не можешь сделать всё тоже только для мувика просто поменяв пути ....

DCat
05.03.2006, 04:04
KUZEN
Гатство в том, что я могу все без понимания сделать... тупо скопировать, поменять пути и готово...
Но я хочу понять что и как... =)
+ может быть есть примеры каких других дымов... Хотя принцип одинаковый у всех...

Ладно... это флуд уже пошел...
Придется разбираться с тем, что есть... =(

Скажите только как поменять угол движения дымных клубов =)
чтобы двигались по дуге, а не прямо вверх...

sergwizard
05.03.2006, 04:20
DCat, посмотри этот пример.

KUZEN
05.03.2006, 05:01
Да в том то и дело что я предлогаю тебе для начало понять азы , а потом уже лезть в дым ... ладно замяли дело твоё, каждый поступает так как считает нужным ....

DCat
05.03.2006, 07:01
sergwizard Спасибище... это почти то, что мне нужно =)

KUZEN Азы чего? =/
Не понимаю чего азы мне нужно понять?

KUZEN
05.03.2006, 07:55
Да азы флеша ... покупаем книжку для чайников и читаем всё подряд, а не залезаем чёрт знает куда поковырявшись с флешом пару дней ...

DCat
06.03.2006, 03:28
Ваапше-та уж как 2 года как ковыряюсь =)

Не всем же быть мега-программерами AS, чтобы разобираться с дымом... =))

australian incognito
06.03.2006, 05:51
Привет!
Вот нашел в своей коллекции. А вообще на flashkit.com их еще больше.

KUZEN
06.03.2006, 09:11
За 2 года не разобраться с путями ... мдя ... неверное два года , но раз в году )))

DCat
06.03.2006, 10:24
australian incognito Спасибо Клевый огонь... только дыма как-то там нет =)

KUZEN
Такое чувство, будто бы ты сейчас пытаешься измерить кой-чего, а мне это вовсе не нужно... это никому не помогает и тебе не поможет тоже... Крутизной мы можем в других темах помериться... в дизайне например... Там я более компитентен... А здесь я прошу совета профов...
Если у меня не было необходимости такие вещи делать программно, и разбираться со всем подряд тупо нет времени, то это вовсе не обозначает что я глуп...

Если ты так хорошо знаешь предмет, то почему бы не помочь? Я же не прошу тебя писать готовый к употреблению код... если есть примеры, я бы хотел на них взглянуть - нет, так нет...
А смысла разводить флуд, а тем более кого-то обвинять в непрофессионализме не вижу... Это ничего никому не дает...

Жень Шень
06.03.2006, 11:50
Привет!
А такой дым подойдет?
Написан для урока физики по теме "Удельная теплота сгорания на примере дров и каменного угля". Где какой дым, надеюсь, ясно.
Исходник великоват, поэтому "красоту" убрал.

DCat
06.03.2006, 12:11
Спасибо... =)
Интересный дым...
Подойдет =)

Уже целая коллекция их собралась =)

KUZEN
06.03.2006, 19:25
australian incognito Спасибо Клевый огонь... только дыма как-то там нет =)

KUZEN
Такое чувство, будто бы ты сейчас пытаешься измерить кой-чего, а мне это вовсе не нужно... это никому не помогает и тебе не поможет тоже... Крутизной мы можем в других темах помериться... в дизайне например... Там я более компитентен... А здесь я прошу совета профов...
Если у меня не было необходимости такие вещи делать программно, и разбираться со всем подряд тупо нет времени, то это вовсе не обозначает что я глуп...

Если ты так хорошо знаешь предмет, то почему бы не помочь? Я же не прошу тебя писать готовый к употреблению код... если есть примеры, я бы хотел на них взглянуть - нет, так нет...
А смысла разводить флуд, а тем более кого-то обвинять в непрофессионализме не вижу... Это ничего никому не дает...

Да никто не обвинял тебя в непрофессионализме и тягаться я ни в чём с тобой не собираюсь ... всё закончили этот бред ...

Lihachevich
06.03.2006, 19:34
Люди, не дым а загляденье, только тормозит сильно.
А что если попробовать сделать подругому, попроще. Своткай как нить дым, нареж из облачков дыма много фрагментов, определи за каким облаком какие могут появлятся и сделай рандомное по списку их появление. Конечно тут тоже потребуется сделать функцию их движения (Помоему рандом плюс синус плюс направление подойдет)