Comunidad de diseño web y desarrollo en internet online

Problemas con createTextField

Citar            
MensajeEscrito el 01 Ago 2008 02:09 pm
Antes que nada buenas a todos. Les comento que soy un diseñador novato con el tema de código en flash intentado de programar. Razón por la cual me veo obligado a recurrir a este foro para paliar mis dudas, así que muy seguido estaré molestando por aquí.

Por ahora estoy trabado con algo muy puntual, estoy intentando de hacer un efecto de bandas de tipo acordión y cuando quiero poner un texto dentro de dichas bandas no puedo lograr visualizarlo. Debido a mi ignorancia no se si lo estoy haciendo bien o mal. El problema es con la última función: textosRectangulos();

A continuación les voy a poner el código, como no tengo ningún elemento en la libreria van a poder copiarlo y pegarlo en un archivo flash y deberan poder visualizar lo poco que hice. Si tienen sugerencias, o correcciones para lo que estoy haciendo por favor se las agradezco de antemano.


El código:

Código :

import flash.geom.*;
import mx.transitions.Tween;


var itemsRects:Array = new Array({Nombre:"YO", Colores:"0xFDB913", Movie:"yo.swf"}, {Nombre:"TRABAJOS", Colores:"0xD6562B", Movie:"trabajos.swf"}, {Nombre:"PROYECTOS", Colores:"0x5C091E", Movie:"proyectos.swf"}, {Nombre:"CONTACTO", Colores:"0x390000", Movie:"contacto.swf"});


dibujarBackground = function () {
   this.createEmptyMovieClip("background_mc",0);
   rectangle_mc._x = 0;
   rectangle_mc._y = 0;
   rectAlto = 600;
   rectAncho = 955;
   drawRectangle(background_mc,rectAncho,rectAlto,0x710D1F,100);
   function drawRectangle(target_mc:MovieClip, boxWidth:Number, boxHeight:Number, fillColor:Number, fillAlpha:Number):Void {
      with (target_mc) {
         beginFill(fillColor,fillAlpha);
         moveTo(0,0);
         lineTo(boxWidth,0);
         lineTo(boxWidth,boxHeight);
         lineTo(0,boxHeight);
         lineTo(0,0);
         endFill();
      }
   }
};


dibujarRectangulo = function () {
   this.createEmptyMovieClip("rectangle_mc",1);
   rectangle_mc._x = 0;
   rectangle_mc._y = 255;
   rectAlto = 18;
   rectAncho = 955;
   drawRectangle(rectangle_mc,rectAncho,rectAlto,0xFDB913,100);
   function drawRectangle(target_mc:MovieClip, boxWidth:Number, boxHeight:Number, fillColor:Number, fillAlpha:Number):Void {
      with (target_mc) {
         beginFill(fillColor,fillAlpha);
         moveTo(0,0);
         lineTo(boxWidth,0);
         lineTo(boxWidth,boxHeight);
         lineTo(0,boxHeight);
         lineTo(0,0);
         endFill();
      }
   }
};


multiplicarRectangulos = function () {
   dibujarBackground();
   dibujarRectangulo();
   for (var i:Number = 1; i<itemsRects.length; i++) {
      duplicateMovieClip("rectangle_mc", "rectangle_mc"+i, this.getNextHighestDepth());
      rectangle_mc._y = rectangle_mc._y+rectAlto;
      cambiarColor(i);
      textosRectangulos(i);
   }
};


cambiarColor = function (i) {
   var ct:ColorTransform = new ColorTransform();
   var newColor = itemsRects[i].Colores;
   ct.rgb = newColor;
   rectangle_mc.transform.colorTransform = ct;
};


textosRectangulos = function(i){
      var cajaDeTexto = _root.rectangle_mc+i.createTextField("my_txt", getNextHighestDepth(), 477, 3, 300, 100);
      cajaDeTexto.multiline = false;
      cajaDeTexto.wordWrap = false;
      var my_fmt:TextFormat = new TextFormat();
      my_fmt.color = 0xFFFFFF;
      my_fmt.underline = false;
      my_fmt.font = "BitDust One";
      my_fmt.size = 8;
      cajaDeTexto.text = "LA REPUTA MADRE";
      cajaDeTexto.setTextFormat(my_fmt);
}


multiplicarRectangulos();

Por untitled

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Ago 2008 05:09 pm
La sintaxis correcta es:

Código :

var cajaDeTexto = _root["rectangle_mc" + i].createTextField("my_txt", this.getNextHighestDepth(), 477, 3, 300, 100);

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 01 Ago 2008 07:51 pm
Gracias por la correción, de todas formas ya se que es lo que esta mal. Mi problema es que yo le cambio el color a los rectangulos y este cambio de color afecta al texto. Ahora bien hay alguna forma de referirme específicamente que el cambio de color se aplique especificamente a un objeto y deje al texto igual sin modificarlo. Perdón, por preguntar estas cosas basicas.

Muchas gracias.-

Por untitled

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Ago 2008 09:26 pm
Bueno lo de cambiar el color a los rectángulos no está mal porque no tiene una sintaxis errónea, más bien es un problema que se te crea, pero si no pones la referencia al texto como te lo he puesto nunca lo visualizarías aunque no llegaras a pintar nunca los cuadrados, porque si tiene una sintaxis erronea.

Te voy a dar un consejo y así te quitas de arriba el problema de los cuadrados pintados, si ya tienes una función que dibuja rectángulos, no la respitas, dejala declarada y crea una función que te dibuje los cuadrados con el color que quieres y pones dentro el texto de una sola vez:

Código :

var itemsRects:Array = new Array({Nombre:"YO", Colores:"0xFDB913", Movie:"yo.swf"}, {Nombre:"TRABAJOS", Colores:"0xD6562B", Movie:"trabajos.swf"}, {Nombre:"PROYECTOS", Colores:"0x5C091E", Movie:"proyectos.swf"}, {Nombre:"CONTACTO", Colores:"0x390000", Movie:"contacto.swf"});

//---Función de dibujar rectángulos
function drawRectangle(target_mc:MovieClip, boxWidth:Number, boxHeight:Number, fillColor:Number, fillAlpha:Number):Void {

      with (target_mc) {
         beginFill(fillColor,fillAlpha);
         moveTo(0, 0);
         lineTo(boxWidth, 0);
         lineTo(boxWidth, boxHeight);
         lineTo(0, boxHeight);
         lineTo(0,0);
         endFill();       
      }
     
}

//---Crear el background

var back:MovieClip = this.createEmptyMovieClip("background_mc", this.getNextHighestDepth());
drawRectangle(back,800,600,0x710D1F,100);

function crearRectangulos():Void{   
   var mc:MovieClip;
   var texto:TextField;
   var posY:Number = 255;
   
   var my_fmt:TextFormat = new TextFormat();
   
   with(my_fmt){      
      color = 0xFFFFFF;
      font = "Arial";
      size = 8;   
   }
   
   for(var i:Number = 0; i < itemsRects.length; i++){
      
      //---Crear el rectángulo
      mc = this.createEmptyMovieClip("mc" + i, this.getNextHighestDepth());
      drawRectangle(mc, 800, 18, itemsRects[i].Colores, 100);
      
      //---Crear el texto
      texto = mc.createTextField("my_txt", mc.getNextHighestDepth(), 477, 3, 0, 0);
      
      with(texto){         
         autoSize = true;
         selectable = false;
         text = itemsRects[i].Nombre;
         setTextFormat(my_fmt);         
      }
      
      mc._y = posY;
      posY += mc._height;
      
   }
   
}

crearRectangulos();


De esta forma queda más limpio, no tienes que utilizar la función de duplicar los cuadrados, ni la de pintarlos, no se si te guste hacerlo de esta manera.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 02 Ago 2008 09:05 pm
Creo que no llegó mi agradecimiento por tu respuesta aparentemente, Ahora voy a ponerme con esto. Muchas gracias por todos tus consejos y aportes y si parece que la forma con la que escribiste tú el código es mucho mejor y optimizada. Te agradezco por la cantidad y calidad de tu respuesta. Estamos en contacto porque seguiré preguntando :)

Por untitled

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Ago 2008 11:58 pm
Aquí estaremos :wink:

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox

 

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