Comunidad de diseño web y desarrollo en internet online

efecto agua

Citar            
MensajeEscrito el 09 Sep 2009 08:50 pm
Hola, estube tratando de convertir este code de AS2 a AS3, y tube muchos problemas. me podrian dar una mano?

Código :

import flash.display.*;
import flash.geom.*;
import flash.filters.*;
img = BitmapData.loadBitmap("imagen");
w = img.width;
h = img.height;
pt = new Point();
Nx = new Matrix();
Mx = new Matrix();
Mx.scale(2, 2);
sal = new BitmapData(w/2, h/2);
sal1 = sal2=new BitmapData(w, h);
ori = acum=new BitmapData(w/2, h/2, false, 128);
attachBitmap(sal2, 0);
ola = new ConvolutionFilter(3, 3, [0, 1, 0, 1, 1, 1, 0, 1, 0], 5);
ade = new ColorTransform(0, 0, .9958, 1, 0, 0, 2, 0);
agua = new DisplacementMapFilter(sal2, pt, 4, 4, 128, 128);
onMouseDown = onMouseUp=function () {
   pul = !pul;
};
onEnterFrame = function () {
   if (pul) {
      ori.setPixel(_xmouse/2, _ymouse/2, 0);
   }
   sal.applyFilter(ori, new Rectangle(0, 0, w/2, h/2), pt, ola);
   sal.draw(sal, Nx, null, "add");
   sal.draw(acum, Nx, null, "difference");
   sal.draw(sal, Nx, ade);
   sal1.draw(sal, Mx, null, null, null, true);
   sal2.applyFilter(img, new Rectangle(0, 0, w, h), pt, agua);
   acum = ori;
   ori = sal.clone();
};

Por lucasmoyano

Claber

1960 de clabLevel

22 tutoriales

Genero:Masculino  

Developer

firefox
Citar            
MensajeEscrito el 09 Sep 2009 10:02 pm
Hola,
pues has tenido suerte, porque hace un tiempo estuve pasando la mayoría de los efectos que creó el gran Teseo desde AS2 a AS3. Este es el del efecto agua:

Código ActionScript :

var pul:Boolean;
var fondo:Imagen = new Imagen(0, 0);
var w:int = fondo.width;
var h:int = fondo.height;
var Pt:Point = new Point(); 
var sal:BitmapData = new BitmapData(w / 2, h / 2);
var sal1:BitmapData;
var sal2:BitmapData;
sal1 = sal2 = new BitmapData(w, h);
var ori:BitmapData;
var acum:BitmapData;
ori = acum = new BitmapData(w / 2, h / 2, false, 128);
addChild(new Bitmap(sal2));
var Nx:Matrix = new Matrix();
var Mx:Matrix = new Matrix();
Mx.scale(2, 2);
var ola:ConvolutionFilter = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1], 9, 0);
var ade:ColorTransform = new ColorTransform(0, 0, 0.996, 1, 0, 0, 2, 0);
var agua:DisplacementMapFilter = new DisplacementMapFilter(sal2, Pt, 4, 4, 48, 48, "ignore");

stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseHandler);
addEventListener(Event.ENTER_FRAME, enterFrameHandler);

function mouseHandler(e:MouseEvent):void
{
   pul = !pul;
}

function enterFrameHandler(e:Event):void
{
   if (pul)
   {
      ori.setPixel(mouseX / 2, mouseY / 2, 0);
   } 
   sal.applyFilter(ori, new Rectangle(0, 0, w / 2, h / 2), Pt, ola);
   sal.draw(sal, Nx, null, "add");
   sal.draw(acum, Nx, null, "difference");
    sal.draw(sal, Nx, ade);
   sal1.draw(sal, Mx, null, null, null, true);
   sal2.applyFilter(fondo, new Rectangle(0, 0, w, h), Pt, agua);
    acum = ori;
   ori = sal.clone();
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Sep 2009 10:37 pm
Muchas Gracias!!! :D

una cosita más, tenes idea como hacer que funcione solamente si el mouse se mueve? sin necesidad de hacer click

Por lucasmoyano

Claber

1960 de clabLevel

22 tutoriales

Genero:Masculino  

Developer

firefox
Citar            
MensajeEscrito el 10 Sep 2009 06:20 am
Borrando todo lo relacionado con "pul":

Código ActionScript :

var fondo:Imagen = new Imagen(0, 0);
var w:int = fondo.width;
var h:int = fondo.height;
var Pt:Point = new Point(); 
var sal:BitmapData = new BitmapData(w / 2, h / 2);
var sal1:BitmapData;
var sal2:BitmapData;
sal1 = sal2 = new BitmapData(w, h);
var ori:BitmapData;
var acum:BitmapData;
ori = acum = new BitmapData(w / 2, h / 2, false, 128);
addChild(new Bitmap(sal2));
var Nx:Matrix = new Matrix();
var Mx:Matrix = new Matrix();
Mx.scale(2, 2);
var ola:ConvolutionFilter = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1], 9, 0);
var ade:ColorTransform = new ColorTransform(0, 0, 0.996, 1, 0, 0, 2, 0);
var agua:DisplacementMapFilter = new DisplacementMapFilter(sal2, Pt, 4, 4, 48, 48, "ignore");

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

function enterFrameHandler(e:Event):void
{
   ori.setPixel(mouseX / 2, mouseY / 2, 0);
   sal.applyFilter(ori, new Rectangle(0, 0, w / 2, h / 2), Pt, ola);
   sal.draw(sal, Nx, null, "add");
   sal.draw(acum, Nx, null, "difference");
    sal.draw(sal, Nx, ade);
   sal1.draw(sal, Mx, null, null, null, true);
   sal2.applyFilter(fondo, new Rectangle(0, 0, w, h), Pt, agua);
    acum = ori;
   ori = sal.clone();
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Sep 2009 05:42 pm
jaja! buenisimo anda de 10!! ahora voy a probar para que ande solamente si se mueve el mouse

Por lucasmoyano

Claber

1960 de clabLevel

22 tutoriales

Genero:Masculino  

Developer

firefox
Citar            
MensajeEscrito el 12 Sep 2009 04:29 pm
aca para que sea mientras mueve solo el mouse:

Código :

var fondo:Imagen = new Imagen(0, 0); 
var w:int = fondo.width; 
var h:int = fondo.height; 
var Pt:Point = new Point();  
var sal:BitmapData = new BitmapData(w / 2, h / 2); 
var sal1:BitmapData; 
var sal2:BitmapData; 
sal1 = sal2 = new BitmapData(w, h); 
var ori:BitmapData; 
var acum:BitmapData; 
ori = acum = new BitmapData(w / 2, h / 2, false, 128); 
addChild(new Bitmap(sal2)); 
var Nx:Matrix = new Matrix(); 
var Mx:Matrix = new Matrix(); 
Mx.scale(2, 2); 
var ola:ConvolutionFilter = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 1, 1, 1, 1, 1], 9, 0); 
var ade:ColorTransform = new ColorTransform(0, 0, 0.996, 1, 0, 0, 2, 0); 
var agua:DisplacementMapFilter = new DisplacementMapFilter(sal2, Pt, 4, 4, 48, 48, "ignore"); 
var xx, yy;
addEventListener(Event.ENTER_FRAME, enterFrameHandler); 
 
function enterFrameHandler(e:Event):void 
{ 
if ((xx != mouseX) || (yy != mouseY))
   ori.setPixel(mouseX / 2, mouseY / 2, 0); 
   sal.applyFilter(ori, new Rectangle(0, 0, w / 2, h / 2), Pt, ola); 
   sal.draw(sal, Nx, null, "add"); 
   sal.draw(acum, Nx, null, "difference"); 
    sal.draw(sal, Nx, ade); 
   sal1.draw(sal, Mx, null, null, null, true); 
   sal2.applyFilter(fondo, new Rectangle(0, 0, w, h), Pt, agua); 
    acum = ori; 
   ori = sal.clone();
   xx = mouseX;
   yy = mouseY;
}

Por lucasmoyano

Claber

1960 de clabLevel

22 tutoriales

Genero:Masculino  

Developer

firefox
Citar            
MensajeEscrito el 30 Mar 2010 08:05 am
Hola llevo mucho tiempo registrado, pero es la primera vez que escribo porque hasta ahora entre tutoriales y pruebas , más o menos había ido tirando, pero me encuentro con que después de hacer este efecto de agua que funciona de lujo, no puedo poner botones o mc encima, he visto que hay algún post por aquí con el mismo problema pero no era con este código.
Me podeis echar un cable?
Gracias

Por gincho

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2010 08:33 am
Sólo tienes que añadir los botones DESPUÉS de añadir el addChild(new Bitmap(sal2))
O bien puedes añadir el Bitmap(sal2) DENTRO de un Mc vacío que ya tengas en el stage

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2010 09:14 am
O sea que lo de hacer en otra capa la botonera como que no funciona, es así?
Gracias

Por gincho

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2010 09:37 am
Gincho, cuando escribimos

Código ActionScript :

addChild(new Bitmap(sal2))

ese "Bitmap" que añadimos lo estamos añadiendo encima de todo lo que haya (incluida tu botonera)
Si tenemos una botonera en el stage, lo que deberíamos hacer es tener también un Mc vacío -en una capa inferior a donde esté la botonera). De ese modo, si tu MC vacío tiene como nombre de instancia, p.e. "agua" (sin las comillas), podemos escribir

Código ActionScript :

agua.addChild(new Bitmap(sal2))

De ese modo, al añadirlo DENTRO de "agua", y nuestra botonera estar por ENCIMA, se verá siempre la botonera por encima.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Mar 2010 09:47 am
Diosssssss, gracias y mil disculpas estoy empezando y a veces lo más lógico se me escapa.
Gracias de nuevo

Por gincho

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Feb 2011 04:06 pm
Si no es mucha molestia, podrías ayudarme con el codigo, para que el efecto agua funcione sobre un movie clip?

Muchas gracias, amigo

Por al500

1 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Feb 2011 04:25 pm
disculpa, olvidé un detalle, que funcione con el rollOver

Saludos

Por al500

1 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Feb 2011 08:05 am
El efecto utiliza filtros de Bitmap, así que para que funcione con un MovieClip basta con dibujarlo en un BitmapData:

Código ActionScript :

var mc1:Mc1 = new Mc1();
var fondo:BitmapData = new BitmapData(mc1.width, mc1.height);
fondo.draw(mc1);
var w:int = fondo.width;
var h:int = fondo.height;
var Pt:Point = new Point();
var sal:BitmapData = new BitmapData(w / 2,h / 2);
var sal1:BitmapData;
var sal2:BitmapData;
sal1 = sal2 = new BitmapData(w,h);
var ori:BitmapData;
var acum:BitmapData;
ori = acum = new BitmapData(w / 2,h / 2,false,128);
addChild(new Bitmap(sal2));
var Nx:Matrix = new Matrix();
var Mx:Matrix = new Matrix();
Mx.scale(2, 2);
var ola:ConvolutionFilter = new ConvolutionFilter(3,3,[1,1,1,1,1,1,1,1,1],9,0);
var ade:ColorTransform = new ColorTransform(0,0,0.996,1,0,0,2,0);
var agua:DisplacementMapFilter = new DisplacementMapFilter(sal2,Pt,4,4,48,48,"ignore");
var oldX:Number;
var oldY:Number;

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

function enterFrameHandler(e:Event):void
{
   if ((oldX != mouseX) || (oldY != mouseY))
   {
      ori.setPixel(mouseX / 2, mouseY / 2, 0);
   }
   sal.applyFilter(ori, new Rectangle(0, 0, w / 2, h / 2), Pt, ola);
   sal.draw(sal, Nx, null, "add");
   sal.draw(acum, Nx, null, "difference");
   sal.draw(sal, Nx, ade);
   sal1.draw(sal, Mx, null, null, null, true);
   sal2.applyFilter(fondo, new Rectangle(0, 0, w, h), Pt, agua);
   acum = ori;
   ori = sal.clone();
   oldX = mouseX;
   oldY = mouseY;
}

Ahora bien, esto sólo es válido si tu MovieClip no tiene ninguna animación, ya que al llamar al método draw se dibuja sólo el primer fotograma del MC.
Si tienes un MC animado, tendrás que llamar a draw dentro del callback de EnterFrame para que se vaya dibujando cada fotograma del MC, aunque haciendo esto el rendimiento bajará considerablemente (vamos, que si tu clip no tiene ninguna animación debes usar el primer código):

Código ActionScript :

var mc1:Mc1 = new Mc1();
var fondo:BitmapData = new BitmapData(mc1.width, mc1.height);
var w:int = fondo.width;
var h:int = fondo.height;
var Pt:Point = new Point();
var sal:BitmapData = new BitmapData(w / 2,h / 2);
var sal1:BitmapData;
var sal2:BitmapData;
sal1 = sal2 = new BitmapData(w,h);
var ori:BitmapData;
var acum:BitmapData;
ori = acum = new BitmapData(w / 2,h / 2,false,128);
addChild(new Bitmap(sal2));
var Nx:Matrix = new Matrix();
var Mx:Matrix = new Matrix();
Mx.scale(2, 2);
var ola:ConvolutionFilter = new ConvolutionFilter(3,3,[1,1,1,1,1,1,1,1,1],9,0);
var ade:ColorTransform = new ColorTransform(0,0,0.996,1,0,0,2,0);
var agua:DisplacementMapFilter = new DisplacementMapFilter(sal2,Pt,4,4,48,48,"ignore");
var oldX:Number;
var oldY:Number;

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

function enterFrameHandler(e:Event):void
{
   if ((oldX != mouseX) || (oldY != mouseY))
   {
      ori.setPixel(mouseX / 2, mouseY / 2, 0);
   }
   fondo.draw(mc1);
   sal.applyFilter(ori, new Rectangle(0, 0, w / 2, h / 2), Pt, ola);
   sal.draw(sal, Nx, null, "add");
   sal.draw(acum, Nx, null, "difference");
   sal.draw(sal, Nx, ade);
   sal1.draw(sal, Mx, null, null, null, true);
   sal2.applyFilter(fondo, new Rectangle(0, 0, w, h), Pt, agua);
   acum = ori;
   ori = sal.clone();
   oldX = mouseX;
   oldY = mouseY;
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 16 Feb 2011 10:16 am

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 16 Feb 2011 03:06 pm
Muchas gracias por la ayuda, ya voy a comenzar a tratar de entender todo el codigo y a ponerlo en práctica, los felicito por su apreciada labor

Saludos

Por al500

1 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.