Comunidad de diseño web y desarrollo en internet online

Problema con el evento MouseOver o RollOver

Citar            
MensajeEscrito el 02 Mar 2011 12:26 am
Estimados amigos:

Tengo un problema que me está volviendo loco. He buscado más de 8 horas alguna solución y después de probar infinidad de ellas me he dado por vencido, no digo que la solución no esté publicada, pues es obvio que lo estará, pero con el cansancio que llevo encima no he conseguido llegar a buen puerto y ya me he desesperado.

Estoy creando una clase en AS2, que se encarga de leer un XML y después monta botones sobre un MovieClip y estos botones se encargarán de mover diferentes anuncios.

Bueno, he conseguido crear los botones, leer el XML y cargar los datos, pero ahora estoy intentando crear el rollOver ó MouseOver ó como diablos haya que llamarlo de los botones y no lo consigo.

El código es este:

Código ActionScript :

import mx.utils.Delegate;

class Anuncios {
   
   // VARIABLES GENERALES
   private static var ancho:Number = Stage.width;
   private static var alto:Number = Stage.height;
   private var contenedor:MovieClip;
   private var boton:MovieClip;
   private var anuncios:MovieClip;
   private var pie:MovieClip;
   var archivo:XML;
   
   // VARIABLES DEL XML
   private var categoria:String;
   private var nombre:String;
   private var fabricante:String;
   private var url:String;
   private var mejoresVentas:Boolean;
   private var productoNuevo:Boolean;
   
   // VARIABLES COLORES
   private static var blanco:Number = 0xFFFFFF;
   private static var negro:Number = 0x000000;
   private static var claroTexto:Number = 0xAAD1E8;
   private static var azulOscuro:Number = 0x346C96;
   private static var azulClaro:Number = 0x2197D3;
   
   // CONSTRUCTOR DE LA CLASE
   public function Anuncios (nombre:String, padre:MovieClip, archivoXML:String) {
      anuncios = padre.createEmptyMovieClip("anuncios", 1);
      contenedor = padre.createEmptyMovieClip (nombre, 2);
      pie = contenedor.createEmptyMovieClip("pie", -1);
      reposicionar(contenedor, 0, 0);
      reposicionar(pie, 0, (alto-50));
      rellenar(contenedor, ancho, alto, blanco, 0);
      rellenar(pie, ancho, 50, azulOscuro, 100);
      cargarXML(archivoXML);
   }
   
   //--funcion
   public function cargarXML (archivoXML:String) :Void {
      archivo = new XML();
      archivo.ignoreWhite = true;
      archivo.onLoad = Delegate.create(this, crearBotones);
      archivo.load(archivoXML);
   }
   
   //--funcion
   public function crearBotones()  {
      
      // CREO LAS VARIABLES NECESARIAS
      var suma:Number;
      var banner:MovieClip;
      var ruta:XMLNode = new XMLNode();
      
      ruta = archivo.firstChild;
      
      // CREO EL BUCLE DE MONTAJE
      for (var i:Number = 0; i < ruta.childNodes.length; i++){
         
         if (suma > (ancho-100)) {
            trace("sobrepasado");
            return;
         }
         
         var capa:Number = 0;
         var nombre_btn:String = "boton" + i;
         var nombre_ban:String = "banner" + i;
         
         // INSTANCIO LOS OBJETOS
         boton = contenedor.createEmptyMovieClip(nombre_btn, i);
         banner = anuncios.createEmptyMovieClip (nombre_ban, i);
         
         // CREO LAS CAJAS DE TEXTO
         boton.createTextField ("categoria_txt", capa, 10, 2, 0, 0);
         capa++;
         boton.createTextField ("fabricante_txt", capa, 10, 15, 0, 0);
         capa++;
         boton.createTextField("nombre_txt", capa, 10, 28, 0, 0);
         
         // CREO LOS TEXTOS
         boton.categoria_txt.text = ruta.childNodes[i].attributes.cat;
         boton.fabricante_txt.text = ruta.childNodes[i].attributes.fab;
         boton.nombre_txt.text = ruta.childNodes[i].attributes.nom;
         
         // APLICO FORMATOS
         formato(boton.categoria_txt, "Sommet", 11, claroTexto, 0);
         formato(boton.fabricante_txt, "Sommet", 11, claroTexto, 0);
         formato(boton.nombre_txt, "SommetB", 12, blanco, 0);
         
         var a:Number = boton.categoria_txt._width;
         var b:Number = boton.nombre_txt._width;
         var c:Number = boton.fabricante_txt._width;
         var max = Math.max(a, b, c);
         var anchoCaja:Number = (Math.round(max) + 20) - 1;

         if (i == 0) {
            boton._x = 0
            suma = anchoCaja;
         } else {
            boton._x = suma;
            suma += anchoCaja;
         }
         
         boton._y = alto-50;
         rellenar(boton, anchoCaja, 50, azulOscuro, 100);
         
         boton.onRollOver = Delegate.create(boton, encima);
         
      }
   }
   
   private function encima () :Void {
      trace(this);
   }
   
   //--funcion
   private function reposicionar (objeto:MovieClip, x:Number, y:Number) :Void {
      objeto._x = x;
      objeto._y = y;
   }
   
   //--funcion
   private function rellenar (objeto:MovieClip, an:Number, al:Number, color:Number, transp:Number) :Void {
      objeto.beginFill(color, transp);
      objeto.moveTo (0, 0); 
      objeto.lineTo(an, 0);
      objeto.lineTo(an, al);
      objeto.lineTo(0, al);
      objeto.endFill();
   }
   
   //--funcion
   private function formato (objeto:TextField, fuente:String, tamano:Number, color:Number, kerning:Number) :Void {
      // VALORES DE LA CAJA DE TEXTO
      objeto.background = false;
      objeto.border = false;
      objeto.selectable = false;
      objeto.multiline = false;
      objeto.embedFonts = true;
      objeto.html = true;
      objeto.autoSize = "left";
      objeto.antiAliasType = "advanced";
      
      // FORMATO DEL TEXTO
      var formato:TextFormat = new TextFormat();
      formato.font = fuente;
      formato.size = tamano;
      formato.color = color;
      formato.letterSpacing = kerning; 
      
      objeto.setTextFormat(formato);
   }
}


Y el problema lo tengo en este trozo como habréis observado:

Código ActionScript :


         boton._y = alto-50;
         rellenar(boton, anchoCaja, 50, azulOscuro, 100);
         
         boton.onRollOver = Delegate.create(boton, encima);
         
      }
   }
   
   private function encima () :Void {
      trace(this);
   }


Si alguien fuera ta amable de explicarme cómo puedo hacer el evento MouseOver en los botones dinámicamente le estaría eternamente agradecido.

La clase delegate me valdría, el problema es que no puedo pasarle parámetros y es imperativo que los pase.

No sólo he probado con la clase delegate, también he probado con un listener, con un eventListener, con función rollOver, MouseOver y más maneras que ahora mismo no me acuerdo pues he hecho cientos de cambios sobre estos métodos y ahora mismo tengo el cerebro como una loncha de bacon bien frita.

Bueno,
Muchas gracias a todos,
Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 02 Mar 2011 06:02 pm
¿Nadie es capaz de orientarme un poco?

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 02 Mar 2011 11:55 pm
Bueno, pues lo acabo de solucionar.

Simplemente he eliminado la clase y he pasado el código al flash, creando los eventos de manera normal en la linea de tiempo.

Un saludo.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome

 

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