Comunidad de diseño web y desarrollo en internet online

Cómo poner un poco de orden en mi Proyecto?

Citar            
MensajeEscrito el 27 Nov 2008 10:15 am
Muy buenas!

Estoy haciendo una actividad en flash y el desorden empieza a ser preocupante. Os explico.

En el primer fotograma tengo el siguiente código:

Código :

var milesimasXcentecima:uint=10;
var milesimasXsegundo:uint=1000;
var milesimasXminuto:uint=1000 * 60;// 60,000
var milesimasXhora:uint=1000 * 60 * 60;// 3,600,000

var hora:uint;
var minuto:uint;
var segundo:uint;
var centesima:uint;

var hora_txt:String;
var minuto_txt:String;
var segundo_txt:String;
var centesima_txt:String;
   
var milesimasTranscurridas:uint;
var copiaDe_GetTimer:uint;
var referenciaTemporal:uint;

function tickTack(e:TimerEvent):void{
   milesimasTranscurridas=getTimer() - copiaDe_GetTimer;
   minuto=Math.floor(milesimasTranscurridas / milesimasXminuto);
   referenciaTemporal=milesimasTranscurridas - minuto * milesimasXminuto;
   
   segundo=Math.floor(referenciaTemporal / milesimasXsegundo);
   referenciaTemporal=referenciaTemporal - segundo * milesimasXsegundo;
   
   centesima=Math.floor(referenciaTemporal / milesimasXcentecima);
   
    // Condicinales que hacen que todos los numeros tengan siempre dos digitos y no uno
    if (minuto < 10) {
        minuto_txt="0" + minuto.toString();
    } else {
        minuto_txt=minuto.toString();
    }
    if (segundo < 10) {
        segundo_txt="0" + segundo.toString();
    } else {
        segundo_txt=segundo.toString();
    }
    if (centesima < 10) {
        centesima_txt="0" + centesima.toString();
    } else {
        centesima_txt=centesima.toString();
    }
    // Pasanos todo al campo de texto
    led_txt.text=minuto_txt + " : " + segundo_txt + " : " + centesima_txt;
}
function IniciarCrono():void{
   var temporizador:Timer=new Timer(10,0);
   temporizador.addEventListener(TimerEvent.TIMER, tickTack);
   copiaDe_GetTimer=getTimer();
   temporizador.start();
};
function CambiarColor(myobj:MovieClip, mycolor:Number) {  
   var newColorTransform:ColorTransform = myobj.transform.colorTransform;
   newColorTransform.color = mycolor;
   myobj.transform.colorTransform = newColorTransform;
};
function NumeroAzar (max:Number, min:Number, decimales:Number):Number {
   var maxConDecimales = max*(Math.pow (10, decimales));
   var minConDecimales = min*(Math.pow (10, decimales));
   return (Math.floor(Math.random() * (maxConDecimales - minConDecimales + 1)) + minConDecimales) / Math.pow (10, decimales);
};


y en el número 11 llamo a las funciones del primer fotograma:

¿Cómo podría hacer para declarar las variables y las funciones en un archivo .as y llamarlas desde el proyecto?

Lo he intentado varias veces pero sin mucho éxito. Me devuelve errores por no estar declarada las variables y las funciones, o algún objeto,...

Muchas gracias a todos!

Por astropajo

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Nov 2008 10:49 am

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Nov 2008 11:14 am
Gracias por contestar tan rápido!

Lo que me gustaría hacer es tener las funciones y las variables fuera del ".fla", creo que sería en un ".as", y llamarlas desde el ".fla".

El motivo es que quiero tener un archivo con las funciones y las variables que sean comunes a varios proyectos.

Por ejemplo, si la función IniciarCrono() la quiero utilizar en varios proyectos, pues la guardo en un archivo con todo el código común.

Espero que me haya explicado bien.

Muchas gracias de nuevo!

Por astropajo

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Nov 2008 12:23 pm
Perdona, es que leí muy rápido y pensé que el problema era poner código en un frame.
Puedes crear un .as y, cuando quieras importarlo con

Código :

import tufichero.as


Aunque propiamente, cuando estamos hablando de AS.3 todo se empaqueta en Clases. ¿qué quiere decir eso? pues que los .as suelen ser de la forma.

Código ActionScript :

package{
  public class Clase1 extends MovieClip 
  {
       //Aquí ponemos las variables de la Clase Clase1
       ......
       //y añadimos el constructor
       public function Clase1() 
       {
       }
   }
}

Donde el nombre del fichero es el mismo que el nombre de la Clase (en este caso tendríamos clase1.as)
Incluso nuestra película puede derivar de una clase. El la "clase del documento" -que es un dato que podemos cambiar-

Ahora para usar esa clase la añadimos a nuestro proyecto y creamos un objeto con new

Código ActionScript :

miclase:Clase1=new Clase1()
//y ahora podemos llamar a los métodos y propiedades de "miclase"
miclase.hazAlgo()


Vale, parece muy complejo, pero eso de las clases te tiene que sonar. Es lo que hacíamos con, p.e. la clase Array -lo que pasa es que en este caso no tenáimos que definirnos un Array.as -Flash ya lo traía "de serie" -

Código :

 
miarray=new Array()
miarray.push("3")


¿cuando hacemos una clase? Pues por ejemplo, queremos tener un cronómetro, como el tuyo. Así podremos usar dicho cronómetro cuando queramos.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Nov 2008 01:36 pm
Muchísimas gracias!

Eso es lo que quería hacer y además lo has explicado fenomenal, mucho más claro que mi pregunta.

Por astropajo

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Nov 2008 06:34 pm
Muy buenas!

Demasiado bonito para ser verdad.

He hecho mi clase, pero me da el siguiente error: "1120: Acceso a una propiedad led_txt no definida." led_txt es el cuadro de texto donde se muestra el cronómetro.

La clase ha quedado así:

Código :

package {
   import flash.display.*;
   import flash.events.*;
   import flash.text.TextField;
   import flash.text.TextFieldAutoSize;
   import flash.utils.Timer;
   import flash.utils.getTimer;


   public class Crono extends MovieClip {
      private var milesimasXcentecima:uint=10;
      private var milesimasXsegundo:uint=1000;
      private var milesimasXminuto:uint=1000 * 60;// 60,000
      private var milesimasXhora:uint=1000 * 60 * 60;// 3,600,000

      private var hora:uint;
      private var minuto:uint;
      private var segundo:uint;
      private var centesima:uint;

      private var hora_txt:String;
      private var minuto_txt:String;
      private var segundo_txt:String;
      private var centesima_txt:String;

      private var milesimasTranscurridas:uint;
      private var copiaDe_GetTimer:uint;
      private var referenciaTemporal:uint;

      public function Crono():void {
         var temporizador:Timer=new Timer(10,0);
         temporizador.addEventListener(TimerEvent.TIMER, tickTack);
         copiaDe_GetTimer=getTimer();
         temporizador.start();
      }
      function tickTack(e:TimerEvent):void {
         milesimasTranscurridas=getTimer() - copiaDe_GetTimer;
         //hora=Math.floor(milesimasTranscurridas / milesimasXhora);
         minuto=Math.floor(milesimasTranscurridas / milesimasXminuto);
         referenciaTemporal=milesimasTranscurridas - minuto * milesimasXminuto;

         segundo=Math.floor(referenciaTemporal / milesimasXsegundo);
         referenciaTemporal=referenciaTemporal - segundo * milesimasXsegundo;

         centesima=Math.floor(referenciaTemporal / milesimasXcentecima);

         // Condicinales que hacen que todos los numeros tengan siempre dos digitos y no uno
         //if (hora < 10) {
         //    hora_txt="0" + hora.toString();
         //} else {
         //    hora_txt=hora.toString();
         //}
         if (minuto < 10) {
            minuto_txt="0" + minuto.toString();
         } else {
            minuto_txt=minuto.toString();
         }
         if (segundo < 10) {
            segundo_txt="0" + segundo.toString();
         } else {
            segundo_txt=segundo.toString();
         }
         if (centesima < 10) {
            centesima_txt="0" + centesima.toString();
         } else {
            centesima_txt=centesima.toString();
         }
         // Pasanos todo al campo de texto
         led_txt.text=minuto_txt + " : " + segundo_txt + " : " + centesima_txt;
      }
   }
}


Muchas gracias!

Por astropajo

24 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Nov 2008 07:53 am
Supongo que tienes en la biblioteca un símbolo con una caja de texto cuyo nombre de instancia es "led_txt" y que la Case es "Cronos" y la Clase Base "flash.display.MovieClip".
Vale, en las opciones de Flash tenemos la opción de "declarar instancias en el escenario automáticamente". Es un check.
Si está chequeado no entiendo qué puede pasar. Si no lo está (es lo aconsejable) tienes que declarar al principio de tu clase cronos dicha variable

Código ActionScript :

public class Crono extends MovieClip {
      ....aquí.....
      private var led_txt:TextField;
      ...luego tus variables y todo lo demás...
      private var milesimasXcentecima:uint=10;
      private var milesimasXsegundo:uint=1000;
      ....
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Nov 2008 09:07 am
Yo recomendaria que hicieras que la funcion devolviera el valor y luego se lo asignes desde el mismo fla donde tiene el textField asi seria mas limpio y la funcion te serviria en todas partes.

algo asi:

Código :

...
public function devolverValor():Number{
   ...
   return variable;
}


y en el fla:

Código :

miTexto.text = clase.devolverValor();

Por GersonM_17

330 de clabLevel



Genero:Masculino   Héroes

Flash AS3 / PHP Developer

firefox
Citar            
MensajeEscrito el 28 Nov 2008 01:01 pm
Muchìsimas gracias a los dos!

Problema solucionado.

Por astropajo

24 de clabLevel



 

firefox

 

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