Comunidad de diseño web y desarrollo en internet online

swf que se comporta distinto dentro de un mc.

Citar            
MensajeEscrito el 27 Mar 2007 06:36 pm
¡Hola, compañeros/as de la comunidad. He buscado y no he encontrado nada que pueda resolverme el problema que se me ha presentado.
Paso a explicarme:
Me bajé de la web http://www.ffflashhh.com/ un ejemplo de un calendario. Lo modifique en su aspecto y cuando lo pruebo funciona estupendamente.
Esta es la captura al ejecutar el achivo.
[img]http://www.fileseasy.com/files/userimages/viewer.php?id=139_img3024captura2.jpg[/img]
Pero cuando cargo este mismo archivo (calendariiowebcole.swf) en la página web que estoy desarrollando para el colegio donde trabajo, inexplicablemente - por lo menos para mí- se me descolocan los dáis y no aparece en rojo la palabra Dom.
El código que utilizo para ello es el siguiente:

Código :

stop();
_root.createEmptyMovieClip("eventos",12);
eventos._x=498;
eventos._y=410;
eventos.loadMovie("calendariowebcole.swf");

En esta captura podéis observar como queda al cargarse dentro del mc.:o
[img]http://www.fileseasy.com/files/userimages/viewer.php?id=1716_img600captura1.jpg[/img]
El código del archivo swf es el siguiente

Código :

_lockroot=true;
System.useCodepage = true;
//Separaciones de las filas y columnas
_global.xSep   = 30;
_global.ySep   = 20;
TextField.prototype.aplicarFormato = function(pFuente,pColor,pTamanyo,pBold,pAlign){
   f    = new TextFormat();
   f.font    = pFuente;
   f.color    = pColor;
   f.size    = pTamanyo;
   f.bold    = pBold;
   f.align    = pAlign;
   f.indent = 1;
   this.setTextFormat(f);
}
MovieClip.prototype.dibujarCuadrado = function(x,y,ancho,alto,borde,colorBorde,alphaBorde,colorRelleno,alphaRelleno){
   with(this){
      lineStyle(borde, colorBorde, alphaBorde);
      beginFill(colorRelleno,alphaRelleno);
      moveTo(x,y);
      lineTo(x+ancho,y);
      lineTo(x+ancho,y+alto);
      lineTo(x,y+alto);
      lineTo(x,y);
      endFill();
   }
}
Calendario = function(x,y, d, m, a){
   this.dia   = d;
   this.mes   = m;
   this.anyo   = a;
   this.eventos   = _global.nEventos;
   this.x      = x;
   this.y      = y;
   primeranyo = 2005; //Primer año que se muestra
   ultimoanyo = 2008; //ultimo año que se muestra
}
Calendario.prototype.pintaCalendario = function(){
   listaDias    = new Array('Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab', 'Dom');
   listaMeses   = new Array('ENERO', 'FEBRERO', 'MARZO', 'ABRIL', 'MAYO', 'JUNIO', 'JULIO', 'AGOSTO', 'SEPTIEMBRE', 'OCTUBRE', 'NOVIEMBRE', 'DICIEMBRE');
   _root.createEmptyMovieClip("cal",10);
   _root.attachMovie( "fondo", "fondo", 9);

   //posicion del calendario
   _root.cal._x = _root.fondo._x;
   _root.cal._y = _root.fondo._y;

   /*********************************
   * Lunes-Domingo
   **********************************/
   for(i = 0;i < listaDias.length;i++){
      _root.cal.createTextField(listaDias[i].toLowerCase(),20+i,i*_global.xSep+10,40,35,20);
      _root.cal[listaDias[i]].text = listaDias[i];
      _root.cal[listaDias[i]].aplicarFormato("Verdana",0x000000,9,false,"center");
   }
   if(i=6){
      //Dom en rojo
      _root.cal[listaDias[i]].aplicarFormato("Verdana",0xff0000,9,false,"center");
   }
   /*********************************
   * dias del mes
   **********************************/
   inicioMes = new Date(this.anyo, this.mes-1,1);
   iniSemana = inicioMes.getDay();
   if(iniSemana == 0) {
      iniSemana = 6;
      
   }else{
      iniSemana = iniSemana - 1;
      
   }   
   xPos   = iniSemana;
   yPos   = 0;
   if(this.mes == 1 or this.mes == 3 or this.mes == 5 or this.mes == 7 or this.mes == 8 or this.mes == 10 or this.mes == 12){
      totalDias = 31;
   }else if(this.mes == 2){
      if((this.anyo % 4 == 0 && this.anyo % 100 != 0) or this.anyo % 400 == 0){
         totalDias = 29;
      }else{
         totalDias = 28;
      }
   }else{
      totalDias = 30;
   }
   ahora = new Date();
   for(i = 1;i <= totalDias; i++){
      _root.cal.createTextField("dia"+i,60+(i*2),(xPos)*_global.xSep+10,_global.ySep+yPos+40,30,20);
      //Cuadrados grises de fondo de cada fecha
      _root.cal.createEmptyMovieClip("fondodefecha"+i,7+20*i);
      _root.cal["fondodefecha"+i].dibujarCuadrado(xPos*_global.xSep+15,_global.ySep+yPos+40,20,15,1,0xCCCCCC,100,0xEAEAEA,0);
      //********************************
      _root.cal["dia"+i].text = i;
      _root.cal["dia"+i].selectable = false;
      
      if(i == ahora.getDate() && ahora.getMonth() == (this.mes-1) && ahora.getYear() == (this.anyo-1900)){
         //fech actual en rojo
         _root.cal["dia"+i].aplicarFormato("Verdana",0xff0000,10,true,"center");
      }else{
         _root.cal["dia"+i].aplicarFormato("Verdana",0x000000,10,false,"center");
      }
      /**********************************
      * fecha pinchable
      **********************************/
      for(j = 0;j < this.eventos.length; j++){
         if(this.eventos[j].attributes.dia == i && this.eventos[j].attributes.mes == this.mes && this.eventos[j].attributes.anyo == this.anyo){
            _root.cal.attachMovie( "fondopinchable", "fondopinchable"+j, j );
            _root.cal["fondopinchable"+j]._x = xPos*_global.xSep+15;
            _root.cal["fondopinchable"+j]._y = _global.ySep+yPos+40;
            _root.cal["fondopinchable"+j].evento = this.eventos[j];
            _root.cal["fondopinchable"+j].onPress = function(){
               _root.cal.info.htmlText = this.evento.firstChild.toString();
               //formato del campo de texto info
               _root.cal.info.aplicarFormato("Verdana",0x006699,10,false,"center");
            }
         }      
      }
      xPos++;
      if(xPos % 7 == 0){
         xPos = 0;
         yPos += _global.ySep;
      }   
   }
   /********************************
   * nombre del mes y año
   *********************************/
   _root.fondo.mesanyo.text = listaMeses[inicioMes.getMonth()]+", "+this.anyo;
   
   /***************************************
   * se crean los botones de avance y retroceso de mes y año
   ***************************************/   
   //mas
   if(_root.d.anyo<ultimoanyo){
   _root.fondo.mas.onPress = function(){
      _root.d.mes++;
      if(_root.d.mes > 12){ _root.d.anyo++;_root.d.mes = 1;}
      _root.d = new calendario(_root.d.x, _root.d.y, 1,_root.d.mes,_root.d.anyo);
      _root.d.pintaCalendario();
   }
   }
   //menos
   if(_root.d.anyo>=primeranyo+1){
   _root.fondo.menos.onPress = function(){
      _root.d.mes--;
      if(_root.d.mes <= 0){ _root.d.anyo--;_root.d.mes = 12;}
      _root.d = new calendario(_root.d.x, _root.d.y,1,_root.d.mes,_root.d.anyo);
      _root.d.pintaCalendario();
   }
   }
   /*************************************
   * textfield info con la informacion que tiene el xml
   *************************************/
   _root.cal.createTextField("info",7000,8,197,215,50);
   _root.cal.info.multiline = true;
   _root.cal.info.html = true;
   _root.cal.info.wordWrap = true; //Ajuste de texto
   _root.cal.info.autoSize = true; //Se muestra completo
   _root.cal.info.selectable = false; //texto seleccionable, pues que no.

   /*************************************
   * Fecha y reloj
   *************************************/
   _root.cal.createEmptyMovieClip("reloj",1000);
   _root.cal.reloj.createTextField("diayhora",7000,0,_root.cal._y+250,220,50);
   _root.cal.reloj.onEnterFrame = function() {
   var horario = new Date();
   this.mesactual = horario.getMonth()+1;
   this.anyoactual = horario.getFullYear();
   this.hora = horario.getHours();
   this.minuto = horario.getMinutes();
   this.segundo = horario.getSeconds();
   if (this.segundo<10) {
      this.segundo = "0"+this.segundo;
   }
   if (this.minuto<10) {
      this.minuto = "0"+this.minuto;
   }
   if (this.hora<10) {
      this.hora = "0"+this.hora;
   }
   _root.cal.reloj.diayhora.text = "  Hoy es "+ahora.getDate()+" del "+ this.mesactual +" de "+ this.anyoactual +" - Hora: "+ this.hora +" : "+ this.minuto +" : "+ this.segundo;
   _root.cal.reloj.diayhora.aplicarFormato("Verdana",0x0066ff,8,true,"left");
   _root.cal.reloj.diayhora.selectable = false;
   }
}
cargaXml = function(fichero){
   doc = new XML();
   doc.ignoreWhite = true;
   doc.load(fichero);
   var nEventos = new Array();
   doc.onLoad = function(){
      _global.nEventos = doc.firstChild.childNodes;
      //Comienzo del calendario:
      var inicio = new Date();
      this.anio = inicio.getFullYear();
      this.mez = inicio.getMonth()+1;
      /*Si quieres que inicialmente el calendario muestre un mes determinado
      de cualquier año, sustituye en el siguiente renglón los parámetros 
      this.mez por el número del mes (ej: octubre = 10)
      y this.anio por el número del año (ej: 2007), 
      Si no lo haces mostrará el mes en curso*/
      d = new calendario(150,150,27,this.mez,this.anio);
      d.pintaCalendario();
   }
}
   /*************************************
   * Leer el xml
   *************************************/
cargaXml("calendario.xml");

Si alguien puede ayudarme le estaría muy agradecido.
Un saludo.

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 27 Mar 2007 07:00 pm
Mmm, interesante. Honestamente, no logro entender por que... pero si te fijas cambia el estilo de fuente :)... es lo que hace que cambie de tamaño y se desajuste. Checa en tu movieClip y trata de ponerle una fuente estandar (_sans, _serif, _typewriter) o checa en la ayuda de flash para incorporar fuentes (Aprendizaje de ActionScript 2.0 en Flash > incorporación de fuentes)

Por El_Beto_TM

156 de clabLevel

1 tutorial

Genero:Masculino  

Mexicali, Baja California

firefox
Citar            
MensajeEscrito el 27 Mar 2007 07:10 pm

El_Beto_TM escribió:

Mmm, interesante. Honestamente, no logro entender por que... pero si te fijas cambia el estilo de fuente :)... es lo que hace que cambie de tamaño y se desajuste. Checa en tu movieClip y trata de ponerle una fuente estandar (_sans, _serif, _typewriter) o checa en la ayuda de flash para incorporar fuentes (Aprendizaje de ActionScript 2.0 en Flash > incorporación de fuentes)

Gracias por tu respuesta.
¿Te refieres a embeber fuentes?
Probaré lo que me dices de cambiar fuentes, de nuevo gracias :D

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 27 Mar 2007 07:41 pm
El_Beto_TM, he probado a cambiar las fuentes en el archivo que se carga y sigue sin funcionar.
Cambiando, parte del código, en concreto esto:

Código :

ahora = new Date();
   for(i = 1;i <= totalDias; i++){
      _root.cal.createTextField("dia"+i,60+(i*2),(xPos)*[b]_global.xSep+10[/b],_global.ySep+yPos+40,30,20);
      //Cuadrados grises de fondo de cada fecha
      _root.cal.createEmptyMovieClip("fondodefecha"+i,7+20*i);
      _root.cal["fondodefecha"+i].dibujarCuadrado(xPos*_global.xSep+15,_global.ySep+yPos+40,20,15,1,0xCCCCCC,100,0xEAEAEA,0);


por esto

Código :

ahora = new Date();
   for(i = 1;i <= totalDias; i++){
      _root.cal.createTextField("dia"+i,60+(i*2),(xPos)*[b]_global.xSep+15[/b],_global.ySep+yPos+40,30,20);
      //Cuadrados grises de fondo de cada fecha
      _root.cal.createEmptyMovieClip("fondodefecha"+i,7+20*i);
      _root.cal["fondodefecha"+i].dibujarCuadrado(xPos*_global.xSep+15,_global.ySep+yPos+40,20,15,1,0xCCCCCC,100,0xEAEAEA,0);


coloco los dias dentro de las casillas; pero, lo que no entiendo es, a qué se debe que un swf que funciona bien, cuando lo cargas dentro de un mc contenedor deje de comportarse del mismo modo.
Un saludo

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 27 Mar 2007 10:38 pm
Alguien me puede indicar otro modo de cambiar esta anomalía.
Gracias.
Un saludo

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 28 Mar 2007 06:07 pm
He conseguido averiguar, o eso creo, la razon de que no tenga el mismo formato el calendario cuando lo ejecuto como un archivo swf que cuando se carga en el mc contenedor.
Al parecer no se ejecuta una parte del código del swf; en concreto esta parte:

Código :

TextField.prototype.aplicarFormato = function(pFuente,pColor,pTamanyo,pBold,pAlign){
   f    = new TextFormat();
   f.font    = pFuente;
   f.color    = pColor;
   f.size    = pTamanyo;
   f.bold    = pBold;
   f.align    = pAlign;
   f.indent = 1;
   this.setTextFormat(f);
}

por ello no se aplica el formato y los campos de texto creados mediante as toman el formato predeterminado de cualquier objeto TestFormat.
Digo que creo que se dede a esto porque he inutilizado esta parte del código en el swf del calendario y al probarlo me aparece del mismo modo que aparecía en la película cuando lo cargaba dentro del mc.
¿Alguien, por favor, sabe porque se produce esto?
¿Cómo puedo solucionarlo?
(Un saludo y gracias de antemano. :)

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 31 Mar 2007 06:55 am
resume el maldito codigo para poder entender cual es tu problema

aunque a simple vista ya veo tu mayor problema
puedes solucionarlo asi:

para localizar un error, analiza todo tu código por etapas, ¿funciono esto? entonces ¿funciona esto otro? una vez que detectes el error intenta solucionarlo, si no resulta pregunta acerca del error especifico, de la forma mas breve y clara posible

JAMAS POSTEES MAS DE 5 LINEAS DE CODIGO

Ademas lee Guía para obtener ayuda efectiva en los foros y obviamente las reglas del foro

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 31 Mar 2007 08:52 am
inyaka, obviamente tienes razón en lo del código; si bien es cierto que no he encontrado nada que indique que no deba escribir tantas líneas. Con respecto al problema ya indiqué que creo que se debe a que no se ejecuta la función aplicarFormato definida de este modo:

Código :

TextField.prototype.aplicarFormato = function(pFuente,pColor,pTamanyo,pBold,pAlign){
   f    = new TextFormat();
   f.font    = pFuente;
   f.color    = pColor;
   f.size    = pTamanyo;
   f.bold    = pBold;
   f.align    = pAlign;
   f.indent = 1;
   this.setTextFormat(f);

Es decir, se aplica el formato cuando utilizo el swf, pero no se aplica cuando cargo este swf dentro de un mc contenedor.
Ese es mi problema y mi petición de ayuda.
Un saludo :D

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 31 Mar 2007 09:11 am
bien esto ya es mucho mas legible
por lo que dices deduzco que puede haber algún _root molestando, me explico:

Código :

 cuando cargo B en A  el _root de B apunta para A 


pero esto se puede solucionar bloqueado el _root, para que haga reseña solo dentro del mismo swf:
para esto coloca en el primer frame y en la primera capa de B.fla

Código :

this._lockroot = true;

ahora cuando quieras llamar al _root de A.swf simplemente usa _level0 por ejemplo si en B.swf tienes un menu para ir hacia el frame 15 de a seria asi:

Código :

_level0.gotoandPlay(15);



PD. cuenta las lineas que he posteado yo y cuenta las ultimas lineas que posteaste ¿te das cuanta de que menos es mas?

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 31 Mar 2007 09:47 am
Gracias por la contestación inyaka. Yo también pensé en problemas de _root y en el, siguiendo tu ejemplo, b.fla tengo puesto en su unico frame

Código :

this.lockroot=true

Todo el calendario (b.fla) se pinta atachando un mc de la biblioteca.(fonfo)

Código :

Calendario.prototype.pintaCalendario = function(){
   listaDias    = new Array('Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab', 'Dom');
   listaMeses   = new Array('ENERO', 'FEBRERO', 'MARZO', 'ABRIL', 'MAYO', 'JUNIO', 'JULIO', 'AGOSTO', 'SEPTIEMBRE', 'OCTUBRE', 'NOVIEMBRE', 'DICIEMBRE');
   _root.createEmptyMovieClip("cal",10);
   _root.attachMovie( "fondo", "fondo", 9);


¿Crees que el problema puede estar ahí?
Un saludo :D

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 31 Mar 2007 10:02 am
no te entiendo
¿ya probaste si funciono lo de poner "this.lockroot=true" en el primer frame y primera capa ?
continua el mismo problema ??? :?
¿notas alguna diferencia?

y si, si creo que el problema puede estar ahí (por eso di esa explicación)

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 31 Mar 2007 10:45 am
Ya probé, inyaka, a ponerlo. No noto nada especial, pues como te comenté ese código lo tenía ya puesto.
Sigue sin aplicarse el formato. No se, tal vez tenga que variar toda la forma de creación del calendario.
¿Tienes inconveniente en que te mande el fla del calendario para, si tines tiempo, le eches un vistazo?
También puedo enviarte el .fla de la web que estoy haciendo donde cargo ese calendario.
Un saludo y gracias :D

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 03 Abr 2007 09:19 pm
Bueno, definitivamente he tenido que replantear el calendario. Ahora ya funciona, aunque mis escasos conocimientos de AS no me permiten saber la razón de que no funcionara.
No he utilizado

Código :

TextField.prototype.aplicarFormato

y he creado el formato mediante

Código :

format = new TextFormat();
......

y lo he aplicado con

Código :

setTextFormat(format)


Supongo que el error que me daba tiene que ver con cambios entre versiones de flash (mx y 8) AS (1 y 2) Flash Player (6 y 8).
En fin, si alguien - aunque sólo sea por curiosidad y por conocer más de AS - me puede explicar lo que ocurría, se lo agradeceré.
Un saludo y gracias a aquellos que respondieron, como es habitual en este magnífico foro, a mis dudas. :D :D

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox
Citar            
MensajeEscrito el 03 Abr 2007 09:38 pm
jamas he usado la clase prototype asi es que no tengo idea de por que falla, a lo mejor pueda estar desfasada pues viene de ActionScript 1

de todos modos la segunda forma en que lo haces es la misma que uso yo

Código :

var miTextFormat = new TextFormat();
miTextFormat.propiedad = valor;
this.createTextField("texto", this.getNextHighestDepth(), tX, tY, tW, tH);
texto.embedFonts= true; 
//si quiero embeber fuentes el texto funcionaria con fuentes embebidas
texto.setNewTextFormat(miTextFormat);

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 04 Abr 2007 07:23 am
bueno, inyaka, quizá alguien del foro pueda darnos luz sobre prototype aplicado a TextField, mientras tanto seguiré utilizando la forma que te indiqué y que también, veo, que tú usas.
Un saludo :D :D

Por julio.numerotrece

19 de clabLevel



 

Madrid

firefox

 

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