Просмотр полной версии : эффект воды
Поможите люди добрые!
Нужен реальный эффект воды, чтоб - как на самом деле!!!
Нашел скрипт (спасибо чуваку, который его написал):
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
myBitmap = new BitmapData(390,293,false,0);
pt = new Point(0,0);
mpoint = new Point(0,0);
myDispl = new DisplacementMapFilter(myBitmap, mpoint,1,2,10,50);
water_mc.myList = new Array();
water_mc.myList.push(myDispl);
water_mc.filters = water_mc.myList;
i = 1;
this.onEnterFrame = function()
{
filterList = water_mc.filters;
offset = new Array();
offset[1] = new Object();
offset[1].x = i;
offset[1].y = i/8;
myBitmap.perlinNoise(45,5,3,50,true,false, 7,true,offset);
filterList.mapBitmap = myBitmap;
water_mc.filters = filterList;
i++;
} Вопрос:
Можно ли его как-нибудь изменить, чтоб процессор не тормозил (при тестировании такого скрипта, процессор загружен на 95-100%).?
Возможно ли это???
aQuestion
28.11.2007, 12:12
у меня при 170х170/12фпс проц тянет 27% плюс минус. по мне весьма неплохо.
Нет возможности уменьшить размер битмапа.
Необходимо изменение скрипта!
chingachgoog
28.11.2007, 12:26
Надо карту смещений для DisplacementMapFilter (которая сейчас генерится perlinNoise, что ресурсоемко) нарисовать руками.
Помогите, объясеите пжста что такое DisplacementMapFilter, и с чем его едят!?
Как ее надо рисовать и исправить код?
chingachgoog
28.11.2007, 13:43
Не так это просто.
http://flasher.ru/forum/showthread.php?t=100674&page=4
Огромное спасибо!
Но только я так и не смог модернизировать код.
Если есть возможность - скинь пожалуйста ссылку на исходник (реалистичная вода) с подобным кодом!
TERRORist
28.11.2007, 17:58
да видео сделай и не мучайся
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 1: Statement must appear within on/onClipEvent handler
import flash.display.*;
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 2: Statement must appear within on/onClipEvent handler
import flash.geom.*;
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 3: Statement must appear within on/onClipEvent handler
import flash.filters.*;
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 4: Statement must appear within on/onClipEvent handler
myBitmap = new BitmapData(390,293,false,0);
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 5: Statement must appear within on/onClipEvent handler
pt = new Point(0,0);
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 6: Statement must appear within on/onClipEvent handler
mpoint = new Point(0,0);
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 7: Statement must appear within on/onClipEvent handler
myDispl = new DisplacementMapFilter(myBitmap, mpoint,1,2,10,50);
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 8: Statement must appear within on/onClipEvent handler
water_mc.myList = new Array();
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 9: Statement must appear within on/onClipEvent handler
water_mc.myList.push(myDispl);
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 10: Statement must appear within on/onClipEvent handler
water_mc.filters = water_mc.myList;
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 11: Statement must appear within on/onClipEvent handler
i = 1;
**Ошибка** Сцена=Сцена 1, слой=Слой 1, кадр=1:Строка 12: Statement must appear within on/onClipEvent handler
this.onEnterFrame = function()
Общее количество ошибок ActionScript: 12 Сообщенные ошибки: 12
ну как нравиться
Код надо в кадр помещать, а не на клип.
alexx25 вот тебе мое извращение :victory: вода это не всегда вода
import flash.display.BitmapData
import flash.filters.DisplacementMapFilter
import flash.geom.Point
noise = new BitmapData(830, 174, false, 0x000000);
_root.attachBitmap(noise, 1);
_root.attachMovie("water", "water", 2);
cx = 0;
cy = 0;
seed = random(Number.MAX_VALUE);
t_i = 0;
directn = 1;
onEnterFrame = function() {
if (directn == 1 && t_i < 800) t_i++;
else {
t_i = 0;
}
trace(t_i);
update(t_i, 0);
}
function update(x, y){
off1 = new Point(x, y);
noise.perlinNoise(50, 20, 1, seed, true, true, 1 | 2, false, [off1]);
water.filters = [new DisplacementMapFilter(noise, new Point(0,0), 1, 2, 10, 10)];
}
полчучается такой эффект что в аттаче
Тормозит жуть.. у меня C2800 сразу подлетает загрузка до 100%
chingachgoog
01.12.2007, 13:41
Это та же дыня только сбоку: perlinNoise генерит карту смещений для DisplacementMapFilter. Отсюда и ожидаемая загрузка процессора.
ну тогда могу предложить другой вариант как некторые флэшеры делают бегущие облака: длииииинная полоска движущеся воды и медленно ее двигаем :)
Вот мой вариант сего чуда.
http://vapes.na.by/blog/index.php?entry=entry071009-112359
джонатан
20.05.2008, 01:49
Вот у меня тоже такая же беда, процессор адски загружается, а мне в флеш сайт эффект нужен, а там кроме этого тоже эффекты имеются... Прям не знаю, что и делать...
http://silin.fatal.ru/AS2/ripple/ripple.rar
джонатан
21.05.2008, 22:31
Вот тут вот (http://www.grandbaikal.ru/img/GrandBaikal2008/flash/head.swf) классно вода сделана, и проц не жрет совсем почти... Интересно как?
покадровая анимация. по-русски: gif. ))) только большой и из джипегов)))
Это чтото типа Particle Illusion использовано для генерации серии кадров.
джонатан
22.05.2008, 11:39
Wolsh
Ну да! Я тоже так подумал, весит она уж больно много просто.
Kuruki
У Вас прикольный вариант конечно, но все повынесено в отдельные as файлы, и я прям затрудняюсь разобраться где что, надо еще поковырять...
Вариант не мой, а silin'a. Эффект воды - это класс Ripple. А класс InstanceManager создает мувиклип (и не только) и делает его экземпляром указанного класса (Ripple).
DJ_Baton
22.05.2008, 21:24
четкий скрипт !!!
perlinNoise можно посчитать один раз, а потом тока двигать карту..
джонатан
22.05.2008, 22:55
perlinNoise можно посчитать один раз, а потом тока двигать карту..
Ну тут като не очень смотрится... Да и когда я исходник открываю, то не работает. Ошибку даже выдает:
The name of this class, 'Wobble', conflicts with the name of another class that was loaded, 'Wobble'.
>>Ну тут като не очень смотрится..
тогда присоединяюсь к TERRORist'у: делай видео..
>>The name of this class, 'Wobble', conflicts with..
в меню: Control-delete ASO files
джонатан
23.05.2008, 02:18
silin
>Видио слишком много места занимает, а мне дорог каждый кб. Сайт в провиции будет работать. А там все все еще любят DialUp
А как можно замедлить это, не трогая fps??? При 31 как я уже говорил не очень смотриться, но я уменьшил до 21, и по моему очень даже не плохо стало...
И еще можно ли уменьшить ширину "полос"?
Сложный код слишком для моего уровня :(
var wobble:Wobble = new Wobble(picMC._width, picMC._height);
wobble.vaweAmplitude=128;//размах колебаний
wobble.vaweLength=8;//ширина
function onEnterFrame()
{
wobble.shift();
picMC.filters = [wobble.filter];
}
ps. по краям возможны артефакты
т.е. придется прятать кромки или за сценой или под маску все это добро засунуть..
джонатан
23.05.2008, 19:02
Да да да! Артефакты я уже запрятал :) Спасибо!
Я вот только не могу понять в кокую сторону колебания происходят???
Вродебы как влево вправо, но местами кажется что и снизу вверх...
Можно какнибудь сделать, чтобы снизу частота колебаний была выше чем сверху?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.