Foros del Web » Creando para Internet » Flash y Actionscript »

[AS2] Eventos y parametros

Estas en el tema de [AS2] Eventos y parametros en el foro de Flash y Actionscript en Foros del Web. Hola a todos. Tengo un problemilla con un evento que me estoy montando. He creado una grafica que se genera a través de la recogida ...
  #1 (permalink)  
Antiguo 27/09/2007, 08:00
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
[AS2] Eventos y parametros

Hola a todos.
Tengo un problemilla con un evento que me estoy montando.

He creado una grafica que se genera a través de la recogida de variables pasadas desde html.

Mi objetivo es que al pasar el raton por encima de ciertos puntos de la grafica se muestre un tooltip (ventana emergente) mostrando detalles.

El problema me viene al definir el evento onRollOver; y es que como no me permite pasarle parametros, no puedo personalizar cada tooltip y por lo tanto cada tooltip me aparece vacío.
Tengo el siguiente codigo que se ejecuta a la hora de crear cada uno de los puntos:
Código:
for( i=DIVISIONES_X-1; i>=0; i-- )
{
	punto = attachMovie("punto", "punto_"+i, 3+i);
        punto.onRollOver = function()
        {
 	      tooltip = attachMovie( "tooltip", "tooltip", 200 );
	      tooltip.rendimiento.text = 'Rendimiento: ' + valores[i] + '%';
	      tooltip._x = this._x+20;
	      tooltip._y = this._y-40;
        }
}
valores[i] es un array que contiene cada uno de los valores que quiero mostrar en cada tooltip, pero evidentemente cuando se ejecuta la función valores[i] no tiene ningún valor...

He probado a meter valores[i] dentro de punto antes de definir el evento:
Código:
punto.valor = valores[i];
 punto.onRollOver = function()
        {
 	      tooltip = attachMovie( "tooltip", "tooltip", 200 );
	      tooltip.rendimiento.text = 'Rendimiento: ' + this.valor + '%';
	      tooltip._x = this._x+20;
	      tooltip._y = this._y-40;
        }
Pero tampoco funciona...

Que opciones tengo??
  #2 (permalink)  
Antiguo 28/09/2007, 00:21
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: [AS2] Eventos y parametros

Nadie?
  #3 (permalink)  
Antiguo 28/09/2007, 01:00
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: [AS2] Eventos y parametros

Creo que el problema lo tienes en la variable i del bucle. No creo que se mantenga dentro del evento onRollOver. Pero como el nombre de instancia es inamovible, yo partiría de ahí. Prueba esto con el primero de los dos códigos que has colgado aquí:
Código:
punto.onRollOver = function() {
   var nombre:String = this._name;
   var num:Number = nombre.substr(nombre.lastIndexOf('_')+1);
   tooltip.rendimiento.text = 'Rendimiento: ' + valores[num] + '%';
   ...
Por probar que no quede. De todos modos, comprueba que la matriz valores es global y accesible desde el evento onRollOver.
Código:
punto.onRollOver = function() {
   trace (valores);
   ...
Saludos!
  #4 (permalink)  
Antiguo 28/09/2007, 01:14
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: [AS2] Eventos y parametros

He mirado de averiguar que "valores" sea global y accesible dentro de onRollOver tal como me has indicado y efectivamente es global y accesible.

Sobre el otro pedazo de codigo no me rula. Parece que no es capaz de averiguar el _name de this
Código:
var nombre:String = this._name;
var num:Number = nombre.substr(nombre.lastIndexOf('_')+1);
trace(nombre);
Esto devuelve undefined

Existe algún problema en mi manera de crear los "puntos"? Me refiero dentro del bucle, donde a cada iteración voy machacando la variable puntos... puede tener esto algo que ver en que no sepa dentro del evento que valor tiene this._name; ?
Edito:
He probado a hacer trace(this) dentro del evento y me devuelve el nombre correcto del movieclip (_level0.punto_5, _level0.punto_4, _level0.punto_3 ...) , pero como es una referencia y no una cadena no puedo hacer nada con ella... probaré un casting, no se si existe en actionscript, ya contaré.

Aprovecho la ocasión también para preguntar si puedo "inventarme" una propiedad para el movieclip y darle un valor. Ejemplo:
Código:
punto.fecha = '12/02/07';
Huelga decir que lo he intentado pero haciendo un trace de este valor inmediatamente después me salta un undefined como una casa.

Última edición por clinisbut; 28/09/2007 a las 01:23
  #5 (permalink)  
Antiguo 28/09/2007, 01:33
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: [AS2] Eventos y parametros

Pues lo he probado y me funciona. La única diferencia entre tu código y mi prueba es a la hora de declarar la variable MovieClip. Prueba por si acaso:

var punto:MovieClip = this.attachMovie("punto", "punto_"+i, 3+i);
  #6 (permalink)  
Antiguo 28/09/2007, 01:46
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: [AS2] Eventos y parametros

Ups... quizá olvidé comentar que todo esto se ejecuta dentro de una función...

He probado a declarar punto tal como indicas y todo el código parece que pierda la referencia al "punto"...

Paso la función al completo, a ver si no he comentado algo que fuera importante...

Esto es el codigo que se ejecuta en el frame.
Código:
//Definimos las variables
var max_valor;	//Máximo valor posible
var min_valor;	//Mínimo valor posible
var diferencia;
var offset_valor;
var offset_y;
var offset_x;
var DIVISIONES_Y = 4;
var DIVISIONES_X = 7;

//Dimensiones
var PAD_X	= 30;
var PAD_Y	= 25;
var HEIGHT	= 70;
var WIDTH	= 600;
var COLOR_GRAELLA = 0x000000;
var COLOR_GRAELLA_2 = 0xEEEEEE;
var COLOR_VALOR = 0x33CC33;
var punto:MovieClip;		//Un movieclip

var valores = new Array();

var max_valor = 0;
var min_valor = 0;

//carga_variables();
valores = Array(1,2,3,4,5,6);
draw_ejes( valores );     //Función que dibuja los ejes de la grafica (no la incluyo)
draw_valores( valores );
Y esto es la funcion draw_valores que incluye el codigo que me da problemas
Código:
function draw_valores( valores )
{
	this.createEmptyMovieClip('grafica', 2);
	grafica._x = PAD_X;
	grafica._y = PAD_Y;
	
	last_x = 0;
	last_y = 0;
	
	for( i=DIVISIONES_X-1; i>=0; i-- )
	{
		punto = attachMovie("punto", "punto_"+i, 3+i);
		punto._x = PAD_X*2 + (i*offset_x);
		punto._y = ( (HEIGHT-(HEIGHT/DIVISIONES_Y))/diferencia ) * valores[i];
		//			Valor_a_dibujar X (  escala====(  ESPACIO_DIBUJABLE/diferencia  )     )

		//Dibujamos la línea que une los puntos solo si i>0
		if( i<(DIVISIONES_X-1) )
		{	
			grafica.lineStyle( 4, COLOR_VALOR );
			grafica.moveTo( last_x-PAD_X, -1*last_y + HEIGHT );
			grafica.lineTo( punto._x-PAD_X, -1*punto._y + HEIGHT );			
		}

		last_x = punto._x;
		last_y = punto._y;
		
	
		punto.onRollOver = function()
		{
			var nombre:String = this._name;
			var num:Number = nombre.substr(nombre.lastIndexOf('_')+1);
			trace( nombre );   //UNDEFINED!!!
			this._xscale = 200;
			this._yscale = 200;
		}

		punto.onRollOut = function()
		{
			this._xscale = 100;
			this._yscale = 100;
		}

		punto._y = HEIGHT - punto._y + PAD_Y;	//Esta línea invierte la gráfica

		//Ponemos un valor
		_root.createTextField( 'leyenda_b_'+i, 10+i, punto._x, punto._y, 20,20 );
		eval('_root.leyenda_b_'+i).text = valores[i];
		eval('_root.leyenda_b_'+i).selectable = false;
	}
}
No pretendo ni mucho menos que nadie me acabe el script, simplemente necesito sabe donde me equivoco en mi razonamiento, ayuda que no consigo encontrar por ningún lado (léase googleando y buscando en el foro).

Muchas gracias.
  #7 (permalink)  
Antiguo 28/09/2007, 01:57
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: [AS2] Eventos y parametros

Olvidé decir que trabajo bajo actionscript 2.0 (Flash MX a secas)
  #8 (permalink)  
Antiguo 28/09/2007, 02:16
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Re: [AS2] Eventos y parametros

No comprendo que te falle. Esta es mi prueba y me va perfecto. A ver si puedes extraer algo de ella:
Código:
var valores:Array = Array(1,2,3,4,5,6);
function crear() {
	for (i=0; i<valores.length; i++) {
		var punto:MovieClip = this.attachMovie("punto", "punto_"+i, i, {_x:50*i, _y:100});
		punto.onRollOver = function() {
			var nombre:String = this._name;
			var num:Number = Number(nombre.substr(nombre.lastIndexOf('_')+1));
			trace(valores[num]);
		};
	}
}
crear();
  #9 (permalink)  
Antiguo 28/09/2007, 02:29
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 4 meses
Puntos: 0
De acuerdo Re: [AS2] Eventos y parametros

Bueno ya ví lo que era.
Parece ser que mi version de actionscript no coje la sintaxis:
Código:
var nombre:String = valor;
Tengo que dejarlo:
Código:
var nombre = valor;
Ahora ya funciona! Muchas gracias.

Visto esto parece que ahora ya me permite meter variables dentro del movieClip punto para luego leerlas.

De nuevo muchas gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:26.