Comunidad de diseño web y desarrollo en internet online

Obtener color de un sprite para aplicarlo sobre otro DUDA

Citar            
MensajeEscrito el 10 Ene 2011 09:02 pm
Hola de nuevo.

Tengo una duda, tengo un archivo fla swf con el siguiente código.

Código ActionScript :


//import fl.controls.ColorPicker;
//import fl.events.ColorPickerEvent;
import flash.geom.*;
import flash.events.Event;
import flash.ui.Mouse;
import flash.display.Sprite;

//Genero un contenedor para sprite
var objx:Sprite = new Sprite();
objx.graphics.beginFill(0xDDDDDD);
objx.graphics.drawRect(0,0,55,55);
objx.graphics.lineStyle(1,0x333333,1,false,"none");
objx.name="objx";
//objx.x=100;
stage.addChildAt(objx,0);


//Genero un SPRITE
var spritex:Sprite = new Sprite();
spritex.graphics.beginFill(0xFF0000);
spritex.graphics.drawRect(0,0,50,50);
spritex.graphics.lineStyle(1,0x333333,1,false,"none");
spritex.name="obj1";
spritex.addEventListener(MouseEvent.MOUSE_DOWN,mostrarColor);
objx.addChildAt(spritex,0);

//Genero otro SPRITE
var spritey:Sprite = new Sprite();
spritey.graphics.beginFill(0x000000);
spritey.graphics.drawRect(100,0,50,50);
spritey.name="obj2";
spritey.x=50;
stage.addChildAt(spritey,1);


//Genero un BITMAP
function mostrarColor(e:Event):void
{
   var bmd:BitmapData = new BitmapData(e.target.width, e.target.height, true); 
   bmd.draw(objx.getChildByName(e.target.name)); 
   var intVal:int = bmd.getPixel(mouseX, mouseY);
   trace(intVal);
   var hexVal:String ="0x" + intVal.toString(16);
   trace(hexVal);
   var miColor:ColorTransform=transform.colorTransform;   
   miColor.color=uint(hexVal);
   //miColor.color=0x00CC00;
   //trace(miColor.color);
   stage.getChildByName("obj2").transform.colorTransform = miColor;
}



El código anterior funciona correctamente, hago click sobre el sprite rojo tomo su color y se lo aplico al sprite negro. Pero ahora en el siguiente código, activo la linea 14 que lo único que hace es mover un sprite y ya no funciona. Porque pasa esto?

Código ActionScript :


//import fl.controls.ColorPicker;
//import fl.events.ColorPickerEvent;
import flash.geom.*;
import flash.events.Event;
import flash.ui.Mouse;
import flash.display.Sprite;

//Genero un contenedor para sprite
var objx:Sprite = new Sprite();
objx.graphics.beginFill(0xDDDDDD);
objx.graphics.drawRect(0,0,55,55);
objx.graphics.lineStyle(1,0x333333,1,false,"none");
objx.name="objx";
//objx.x=100;
stage.addChildAt(objx,0);


//Genero un SPRITE
var spritex:Sprite = new Sprite();
spritex.graphics.beginFill(0xFF0000);
spritex.graphics.drawRect(0,0,50,50);
spritex.graphics.lineStyle(1,0x333333,1,false,"none");
spritex.name="obj1";
spritex.addEventListener(MouseEvent.MOUSE_DOWN,mostrarColor);
objx.addChildAt(spritex,0);

//Genero otro SPRITE
var spritey:Sprite = new Sprite();
spritey.graphics.beginFill(0x000000);
spritey.graphics.drawRect(100,0,50,50);
spritey.name="obj2";
spritey.x=50;
stage.addChildAt(spritey,1);


//Genero un BITMAP
function mostrarColor(e:Event):void
{
   var bmd:BitmapData = new BitmapData(e.target.width, e.target.height, true); 
   bmd.draw(objx.getChildByName(e.target.name)); 
   var intVal:int = bmd.getPixel(mouseX, mouseY);
   trace(intVal);
   var hexVal:String ="0x" + intVal.toString(16);
   trace(hexVal);
   var miColor:ColorTransform=transform.colorTransform;   
   miColor.color=uint(hexVal);
   //miColor.color=0x00CC00;
   //trace(miColor.color);
   stage.getChildByName("obj2").transform.colorTransform = miColor;
}



GRACIAS

Por .::Manu::.

45 de clabLevel



Genero:Masculino  

Argentina - Bs.As.

chrome
Citar            
MensajeEscrito el 11 Ene 2011 01:32 am
¿Cual es la línea 14?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2011 12:00 pm
//objx.x=100;

Por .::Manu::.

45 de clabLevel



Genero:Masculino  

Argentina - Bs.As.

chrome
Citar            
MensajeEscrito el 11 Ene 2011 02:11 pm
Es porque se superponen y toma el color del destino, no del origen

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2011 04:00 pm
Creo que hay una confusión ahí porque pongo objx.x=50; y me hace lo mismo.

Por .::Manu::.

45 de clabLevel



Genero:Masculino  

Argentina - Bs.As.

chrome
Citar            
MensajeEscrito el 11 Ene 2011 04:56 pm
Es cierto, lo miré demasiado rápido. Es por el sistema de coordenadas, toma el global en vez del local, que en 0,0 es el mismo pero no cuando aplicas un desplazamiento. Agrega estas líneas para la conversión dentro de mostrarColor:

Código ActionScript :

(...)
 bmd.draw(objx.getChildByName(e.target.name)); 
var p:Point = objx.globalToLocal(new Point(mouseX, mouseY));
var intVal:int = bmd.getPixel(p.x, p.y); 
(...)


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Ene 2011 04:58 pm
Manu ¿qué es lo que vale MouseX y MouseY?
Al no poner NADA delante, MouseX y MouseY se refiere a la posición del ratón respecto de la película principal. supongo que quieres escribir

Código ActionScript :

var intVal:int = bmd.getPixel(bmd.mouseX, bmd.mouseY); 

En cualquier modo dos cosas
1.-Ya que estamos añadiendo un listerner de MouseDown, usemos una variable MouseEvent en la función

Código ActionScript :

function mostrarColor(e:MouseEvent):void {
   .....
}

Eso hará que puedas usar las propiedades de MouseEvent, p.e. e.localX y e.localY
2.-Para hacer referencia al objeto donde se hizo click, usa e.target (con su correspondiente conversión de cast)

Código ActionScript :

function mostrarColor(e:MouseEvent):void {
   var misprite:Sprite=e.target as Sprite
   //trace(misprite.name)
}

Por Eliseo2

710 de clabLevel



 

firefox

 

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