PDA

Просмотр полной версии : Блёр Мувика относительно положения мышки


KiL33
01.10.2008, 18:25
Пытаюсь сделать плавное размытие мувика относительно положения мышки.

Делаю так…:

import mx.transitions.Tween;
import mx.transitions.easing.*;
import flash.filters.BlurFilter;
import mx.utils.Delegate;
blurX = 15;
blurY = 15;
quality = 5;
filter = new BlurFilter(blurX, blurY, quality);
tweenHandler = function() {
filter.blurX = blurFader;
filter.blurY = blurFader;
main.filters = [filter];
}
_root.main.menu_org.onEnterFrame=function(){
//!!
if (_root.main._xmouse>-104 && _root.main._xmouse<312 && _root.main._ymouse>-20 && _root.main._ymouse<280) {
//!!
tween= new Tween (this, "blurFader",Strong.easeOut,0,15,30)
tween.onMotionChanged = Delegate.create(this,tweenHandler);
}else{
tween= new Tween (this, "blurFader",Strong.easeIn,15,0,30)
tween.onMotionChanged = Delegate.create(this,tweenHandler);
}
}

…и ничего!
Тем же способом делаю в виде кнопки, т.е. онРелеасе… и все такое, код работает!

Что за маЗаФакаФлеш!)

Wolsh
01.10.2008, 21:38
Качество вроде 3 максимум)
<удалено>
Сорри, там я ошибся.

darksranger
01.10.2008, 23:27
this, "blurFader",Strong.easeOut,0,15,30
readHelp
tween тот который вы экспортируете(простыми словами родной), НЕ ИМЕЕТ свойства "blurFader"

вобще реализация конечно ....
1 постоянно работающий onEnterFrame, очень плохой тон ( пожалейте процессор ему итак тежело )
2 фильтр должен обновлятся, правильно заметил Wolsh, тоесть должна быть конструкция, типа youMovie.filters = [new BlurFilter(blurX,blurY, 3)]
3 filter = new BlurFilter(blurX, blurY, quality); ??? кому вы задете фильтр ? воздуху ?
4 quality = 5; no comments
5 ну я молчу, про использование, класса tween, при сверху рабочем onEnterFrame ....

PS да после кодинка в AS 3 хочется плакать когда видешь это :)

Wolsh
02.10.2008, 01:22
А фильтр-то кстати обновляется. Извиняюсь что не смог составить эти разбросанные строчки в своем мозгу))).
darksranger, обратите внимание - там обработчик tweenHandler, вызываемый из твина, в нем и обновляется фильтр.
'-_UPD_-'
Вобщем, Вы просто забыли добавить this. Поэтому blurFader в обработчике ищется в руте, а не в main.menu_org, на который указывает this в твине. Но результат ужасен на мой взгляд. Скажите простыми словами, чего Вы хотели добиться?
Вот так будет "работать":
tweenHandler = function() {
filter.blurX = this.blurFader;
filter.blurY = this.blurFader;
main.filters = [filter];
}

KiL33
02.10.2008, 07:58
Понимаю Ваши претензии, осознаю свои косяки, всякое бывает))
Скажите простыми словами, чего Вы хотели добиться?


Чего я хочу добиться, лучше всего, видимо, это понял darksranger, судя по его активности)

А по сути дела хочу добиться, как уже и писал, размытие мувика относительно положения мышки.
Если не понятно:
При наведение на мувик он размывается (плавно), при отводе мышки с мувика он восстанавливается в прежнее состояние.
При этом мувик не должен быть кнопкой. Поэтому и пришла идея описать параметры мувика:
if (_root.main._xmouse>-104 && _root.main._xmouse<312 && _root.main._ymouse>-20 && _root.main._ymouse<280) {

при которых будут происходить все эти действия.

Wolsh
02.10.2008, 11:01
Вы осознали, что при заходе мышки в область 30 (ну может, 12) раз в секунду запускаете новый твин, пытающийся изменить переменную. Правда сделать это он не успевает, так как новый твин тут же начинает все заново))) 30 раз в секунду значение blurFader возвращается к стартовому. О каком плавном изменении может идти речь? В сто раз проще было сделать безо всяких твинов/делегатов, особенно если это для сайта и вес хоть както важен) На onMouseMove проверять координаты мыши и запускать при необходимости фейды - простенькие onEnterFrame конструкции, удаляющие сами себя при достижении нужного блюра и устанавливающие, скажем, флаг - я уже в блюре! или я уже резкий!)))))
Удачи.

KiL33
02.10.2008, 14:24
ААА…кто изменил моё состояние!)

Состояние: птицы улители на ... юг (+1)!

Чувствую себя, как на форуме русского языка и культуры речи!)

А чё за (+1), это типа плюс один в пользу модератора!))
В принципе всё равно!

Вот что получилось:
import flash.filters.BlurFilter;
var blu=0
_root.main.onMouseMove=function(){
if (_root.main._xmouse>-104 && _root.main._xmouse<312 && _root.main._ymouse>-20 && _root.main._ymouse<280) {
blurOn()
}else{
blurOff()
}
}
blurOn=function(){
this.onEnterFrame=function(){
blu+=10
var blurX:Number = blu;
var blurY:Number = blu;
var quality:Number = 3;
var filter:BlurFilter = new BlurFilter(blurX, blurY, quality);
var filterArray:Array = new Array();
filterArray.push(filter);
rect.filters = filterArray;
var rect:MovieClip = main
rect.filters = new Array(filter);
if(blu>100){blu=100
delete this.onEnterFrame
}
}
}
blurOff=function(){
this.onEnterFrame=function(){
blu-=10
var blurX:Number = blu;
var blurY:Number = blu;
var quality:Number = 3;
var filter:BlurFilter = new BlurFilter(blurX, blurY, quality);
var filterArray:Array = new Array();
filterArray.push(filter);
rect.filters = filterArray;
var rect:MovieClip = main
rect.filters = new Array(filter);
if(blu<0){blu=0
delete this.onEnterFrame
}
}
}
//Хде моя скрЫпка! Ща за Жху!

Пишите свои отзывы. Хороший совет он будет полезен для всех, нежели просто перечисление недостатков.

darksranger
02.10.2008, 16:05
KiL33

ну вот, хотя бы какая то логика появилась !
собственно, перечисление недостатков, привело к более менее разумному коду !

советы
ну для начала, я бы например, не стал бы, каждый раз, типизировать переменные
достаточно одного раза
далее...
я бы не стал, плодить кучу не нужного кода ,как например
var filter:BlurFilter = new BlurFilter(blurX, blurY, quality);
var filterArray:Array = new Array();
filterArray.push(filter);
rect.filters = filterArray;

это достаточно заменить одной строчкой youMovie.filters = [new BlurFilter(blurX,blurY, 3)]


далее не стоит использовать _root, это как бы плохой тон !

не понятно зачем вот это

var blurX:Number = blu;
var filter:BlurFilter = new BlurFilter(blurX, blurY, quality);

не проще ?
var filter:BlurFilter = new BlurFilter(blu, blu, quality)

не понятно
if(blu>100){blu=100
delete this.onEnterFrame
}
если blu>100 зачем? его приводить к 100 если он и так 100


+1 кликабелен, нажмите и узнаете за что вы получили +,
стоит наверно сказать, + это не +, скорее это -, вам за то, что вы не прочитали правила форума и нарушили какойто из пунктов, какой именно вам уточнят по клику на +

KiL33
02.10.2008, 18:48
Спасибо, поправил.

Сейчас попытаемся всеми силами напрячься и модернизировать код!)

А именно сделать “тайминг” если это так можно назвать)
Т.е. при отвода мышки с мувика блёр срабатывает через определенное время.

Пока что это всё в таком виде:
import flash.filters.BlurFilter;
var blu=0
//!!
var i=0
//!!
main.onMouseMove=function(){
if (main._xmouse>-104 && main._xmouse<312 && main._ymouse>-20 && main._ymouse<280) {
blurOn()
}else{
//!!
this.onEnterFrame=function(){
i++
if (i==40){
blurOff()
delete this.onEnterFrame
}}
//!! }}

blurOn=function(){
this.onEnterFrame=function(){
blu-=1
var blurX:Number = blu;
var blurY:Number = blu;
main.filters = [new BlurFilter(blurX,blurY, 3)]
if(blu<0){blu=0
delete this.onEnterFrame
}
}
}
blurOff=function(){
this.onEnterFrame=function(){
blu+=5
var blurX:Number = blu;
var blurY:Number = blu;
main.filters = [new BlurFilter(blurX,blurY, 3)]
if(blu>15){blu=15
delete this.onEnterFrame
}
}
}
Срабатывает только один раз, потом начинается полный пи…)

Wolsh
02.10.2008, 19:38
Обнуление i засунуть в else перед onEnterFrame)

darksranger
02.10.2008, 21:37
KiL33 ну вот, код уже принемает читабельный вид ;)
var blurX:Number = blu;
var blurY:Number = blu;
main.filters = [new BlurFilter(blurX,blurY, 3)]

заменить на
main.filters = [new BlurFilter(blu,blu, 3)]

не много логика не понятна
blurOn=function(){
this.onEnterFrame=function(){
blu-=1
var blurX:Number = blu;
var blurY:Number = blu;
main.filters = [new BlurFilter(blurX,blurY, 3)]
if(blu<0){blu=0
delete this.onEnterFrame
}
}
}

получается blu отрицательный ! а должен быть положительный !

далее
this.onEnterFrame=function(){
i++
if (i==40){
blurOff()
delete this.onEnterFrame
}}
:) оригенальное решение, конечно, но нужно заменить на


var intervalID:Number - в начало кода
...
else{
intervalID = setInterval(blurOff,200)
}
....
blurOff=function(){
clearInterval(intervalID)
...

KiL33
02.10.2008, 23:09
Я засунул свой… i в нужное место и всё встало… на свои места)
Спасибо за помощь без вас бы ещё долго еб… с этим горе кодом.
______________
var intervalID:Number - в начало кода
...
else{
intervalID = setInterval(blurOff,200)
}
....
blurOff=function(){
clearInterval(intervalID)
...

Да, мне тоже кажется этот вариант более адекватным, но у меня он почему-то не заработал.