Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.12.2013, 18:36
Кот Баюн вне форума Посмотреть профиль Отправить личное сообщение для Кот Баюн Найти все сообщения от Кот Баюн
  № 1  
Ответить с цитированием
Кот Баюн
 
Аватар для Кот Баюн

Регистрация: Feb 2013
Адрес: Город, которого нет
Сообщений: 581
Отправить сообщение для Кот Баюн с помощью ICQ Отправить сообщение для Кот Баюн с помощью Skype™
По умолчанию помогите улучшить эффект с Blur

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

как можно это улучшить?
Вложения
Тип файла: rar blurr.rar (5.19 Мб, 16 просмотров)


Последний раз редактировалось Кот Баюн; 08.12.2013 в 09:15.
Старый 10.12.2013, 10:11
Кот Баюн вне форума Посмотреть профиль Отправить личное сообщение для Кот Баюн Найти все сообщения от Кот Баюн
  № 2  
Ответить с цитированием
Кот Баюн
 
Аватар для Кот Баюн

Регистрация: Feb 2013
Адрес: Город, которого нет
Сообщений: 581
Отправить сообщение для Кот Баюн с помощью ICQ Отправить сообщение для Кот Баюн с помощью Skype™
неужели такой исходник сложный
что прям совсем никто не знает

Старый 10.12.2013, 12:44
dark256 вне форума Посмотреть профиль Отправить личное сообщение для dark256 Посетить домашнюю страницу dark256 Найти все сообщения от dark256
  № 3  
Ответить с цитированием
dark256
 
Аватар для dark256

блогер
Регистрация: Apr 2008
Адрес: SPb
Сообщений: 3,718
Записей в блоге: 5
Отправить сообщение для dark256 с помощью ICQ Отправить сообщение для dark256 с помощью Skype™
Смутно это всё как-то.....
__________________
FLASHER.MAP SOUNDSTAGE / CS3 / AS2

Старый 10.12.2013, 13:39
Кот Баюн вне форума Посмотреть профиль Отправить личное сообщение для Кот Баюн Найти все сообщения от Кот Баюн
  № 4  
Ответить с цитированием
Кот Баюн
 
Аватар для Кот Баюн

Регистрация: Feb 2013
Адрес: Город, которого нет
Сообщений: 581
Отправить сообщение для Кот Баюн с помощью ICQ Отправить сообщение для Кот Баюн с помощью Skype™
Смутно что?
Код в исходнике или сам принцип?

Добавлено через 13 минут
Размываемый мувик имеет instance name fon.
На нем есть определенные скрипты, которые движут его влево-вправо, вверх-вниз (мышкой)
Далее.
На Stage в левом углу есть такой черный квадратик, зовется размывалка.
В первом кадре размывалки написано -

Код AS1/AS2:
_root.speedX1 = _root.fon._x;
 
_root.speedY1 = _root.fon._y;
здесь отслеживается начальная точка, откуда надо размывать

во втором кадре код -

Код AS1/AS2:
_root.speedX2 = _root.fon._x;
_root.speedXRaznost = _root.speedX1-_root.speedX2;
_root.speedY2 = _root.fon._y;
_root.speedYRaznost = _root.speedY1-_root.speedY2;
Во втором кадре находится конечная точка,
потом между точками 1 и 2 находится разность.
Полученное число и есть BlurX и BlurY в фильтре.
Если число отрицательно, оно умножается на -1, потому что Blur не будет работать с минусом.

1-й и 2-й кадр в размывалке зациклены на бесконечность.


На первом кадре таймлайна код

Код AS1/AS2:
import flash.filters.BlurFilter;
this.onEnterFrame = function() {
	var blur_blurX:Number = _root.speedXRaznost;
	var blur_blurY:Number = _root.speedYRaznost;
	var blur_quality:Number = 1;
	var filter_blur:BlurFilter = new BlurFilter(blur_blurX, blur_blurY, blur_quality);
	fon.filters = [filter_blur];
	trace(_root.speedXRaznost);
	if (_root.speedXRaznost<0) {
		_root.speedXRaznost=_root.speedXRaznost*-1;
	}
	if (_root.speedYRaznost<0) {
		_root.speedYRaznost=_root.speedYRaznost*-1;
	}
};
Проблема в том, что размывалка дает задержку в один кадр.
Нужно, чтобы задержка высчитывалась программно, с помощью какого-нибудь таймера, вроде setInterval
Тогда будет гладко.

Старый 10.12.2013, 13:48
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Как-то у вас все сложно. Лишние сущности - мувики дополнительные с кадрами, разблюриватели. Умножение на "-1" с условием (когда есть же метод Math.abs).
См. пример, может так? Движение просто по onMouseMove осуществялется, дельта - это и есть скорость, нормализуем blurX и blurY на 256, используя параметр этой дельты-скорости.
Если нужна задержка какая-то то можно ввести и ее. Главное - понять, задержка между какими именно событиями вам нужна.
"blur2" - покомпактнее, см. его
Вложения
Тип файла: rar blur.rar (7.9 Кб, 11 просмотров)
Тип файла: rar blur2.rar (7.0 Кб, 13 просмотров)
__________________
Идите первым!

Старый 10.12.2013, 15:22
Кот Баюн вне форума Посмотреть профиль Отправить личное сообщение для Кот Баюн Найти все сообщения от Кот Баюн
  № 6  
Ответить с цитированием
Кот Баюн
 
Аватар для Кот Баюн

Регистрация: Feb 2013
Адрес: Город, которого нет
Сообщений: 581
Отправить сообщение для Кот Баюн с помощью ICQ Отправить сообщение для Кот Баюн с помощью Skype™
С onMouseMove мне метод не подходит.
У моего объекта область движения ограничена примерно на 100-200 пикселей с краев экрана.
Соответственно, при движении мыши от края до края он часть пространства стоит неподвижно.
А его вместо этого будет блюрить.
Потому и расчет идет от разности точек А и Б.

И почему-то этот метод дает чересчур длинные неправдоподобные хвосты.
Особенно на медленных движениях.

В моем коде я вижу только единственный недостаток - один кадр при скорости 25к/с слишком мало, для того чтобы флеш успел поймать значения переменных, посчитать разность между точками а и б и разблюрить.
Из-за этого происходит задержка, слишком заметная глазу.
Увеличение fps например, до 50, решает эту проблему, глаз не замечает скачка.
Но 50 я не могу себе позволить, будет потом анимация и видео, сделанное на 25.
Поэтому хотелось бы вместо зацикливания двух кадров, задать, чтобы точки А и Б отлавливались с программным таймером примерно раз в пол-кадра.


Кстати, какая версия у этих исходников?


Последний раз редактировалось Кот Баюн; 10.12.2013 в 15:42.
Старый 10.12.2013, 17:34
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 7  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от Кот Баюн Посмотреть сообщение
И почему-то этот метод дает чересчур длинные неправдоподобные хвосты.
Особенно на медленных движениях.
Там параметр blurMax для регулирования силы блюра - чем больше значение, тем меньше блюр. Можно сильно варьировать.
Цитата:
Сообщение от Кот Баюн Посмотреть сообщение
Кстати, какая версия у этих исходников?
CS5. Не открывается? Привожу код:

Код AS1/AS2:
import flash.filters.BlurFilter;
var blurQuality:Number = 3;
var currentPosition:Array = [fon._x, fon._y];
var blurMax:Number = 300; //коэффициент "неразмытости"
 
this.onEnterFrame = setBlur;
this.onMouseMove = thisMouseMove;
 
function thisMouseMove() 
{
	fon._x = this._xmouse;
	fon._y = this._ymouse;
}
 
function getDelta():Array
{
	var currentDelta:Array = [currentPosition[0] - fon._x, currentPosition[1] - fon._y];
	currentPosition[0] = fon._x;
	currentPosition[1] = fon._y;
	return currentDelta;
}
 
function setBlur () 
{
	var deltaXY:Array = getDelta(); //узнаем две дельты ("скорости") - по X и Y
	var blurX:Number = Math.abs(deltaXY[0] * 256 / blurMax);
	var blurY:Number = Math.abs(deltaXY[1] * 256 / blurMax);
 
	//устанавливаем ограничение
	blurX = blurX > 256 ? 256 : blurX;
	blurY = blurY > 256 ? 256 : blurY;
 
	var filterBlur:BlurFilter = new BlurFilter(blurX, blurY, blurQuality);
	fon.filters = [filterBlur];
}
А ограничение условного "бокса" для перемещения ввести в onMouseMove недолго.
__________________
Идите первым!

Старый 10.12.2013, 17:47
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 8  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Смотрите такой вариант. Пересохранено для CS4, если что.

blur3.swf   (1.1 Кб)


Что касается FPS, то представленный вариант хорошо работает и при 24 к/сек.
Вложения
Тип файла: rar blur3.rar (6.9 Кб, 7 просмотров)
Тип файла: swf blur3.swf (1.1 Кб, 64 просмотров)
__________________
Идите первым!


Последний раз редактировалось mooncar; 10.12.2013 в 18:51.
Старый 10.12.2013, 21:50
Кот Баюн вне форума Посмотреть профиль Отправить личное сообщение для Кот Баюн Найти все сообщения от Кот Баюн
  № 9  
Ответить с цитированием
Кот Баюн
 
Аватар для Кот Баюн

Регистрация: Feb 2013
Адрес: Город, которого нет
Сообщений: 581
Отправить сообщение для Кот Баюн с помощью ICQ Отправить сообщение для Кот Баюн с помощью Skype™
Спасибо за помощь))
Будем искать)
Теперь надо переустановить CS))
У меня три версии флеша, одна 8.0, две другие адобовские.
Адобовские упали.
Надо что-то придумывать.

Старый 11.12.2013, 00:04
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 10  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Мой код из поста №7 будет работать по меньшей мере в обеих адобовских. Там только нет ограничения движения.
__________________
Идите первым!

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:55.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.