En el post con 3D CountDown FIVe3D (ver también cómo lo hice: escribir una cuenta regresiva en Flash ), se le dio una clase para crear un objeto en ActionScript de cuenta atrás, esta es una versión similar en Javascript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| / ** * Clase de cuenta atrás * * @ Autor Giovambattista Fazioli * @ @ E-mail g.fazioli undolog.com * @ Web http://www.undolog.com * * @ Param dd (cadena) "día, mes, año * * / dd ) { función de cuenta atrás (dd) { / / Init tiempo objetivo new Date ( dd ) ; var target = new Date (dd); = target. getTime ( ) ; .. este targetTime meta = getTime ();
/ ** * Actualizar la cuenta regresiva * / = function ( ) { esto. refresh = function () { new Date ( ) ; var hoy = new Date (); today. getTime ( ) ; var hoy = horaActual getTime ().; / / Tiempo que queda ( this . targetTime - currentTime ) ; este _leftMilliseconds = (this. targetTime - Tiempoactual).; Math. floor ( this ._leftMilliseconds / 1000 ) ; esta planta _leftSeconds = Matemáticas (_leftMilliseconds this. / 1000)..; Math. floor ( this ._leftSeconds / 60 ) ; esta planta _leftMinutes Matemáticas = (_leftSeconds this. / 60)..; Math. floor ( this ._leftMinutes / 60 ) ; .. este _leftHours = Matemáticas piso (this. _leftMinutes / 60); / / No hay ningún módulo = Math. floor ( this ._leftHours / 24 ) ; .. este leftDays = Matemáticas piso (_leftHours this. / 24); / / Para la impresión = this ._leftMilliseconds % 1000 ; este leftMilliseconds = esta _leftMilliseconds%. 1000.; = this ._leftSeconds % 60 ; este leftSeconds = esta _leftSeconds. 60%.; = this ._leftMinutes % 60 ; este leftMinutes = esta _leftMinutes 60%..; = this ._leftHours % 24 ; .. este leftHours = esta _leftHours 24%; } ( ) ; este refresh ().; } |
Ejemplo
1 2 3
| new countDown ( '1 1, 2009' ) ; var = new cd de cuenta atrás (1 '1, 2009 '); / / Mostrar el número de días, horas, minutos, segundos y milisegundos a 01 de enero 2009 |
Más información ...
Aquí hay algunos consejos sobre cómo escribir un buen código orientado a objetos (OO) en Adobe Flash, especialmente para aquellos que siguen utilizando la versión MX a la espera de pasar a CS3.
Organizar las carpetas de las clases
Primero de todo la organización de las clases hace que el trabajo de mantenimiento del código extremadamente más sencillo. También puede crear una biblioteca real se puede reutilizar en otros proyectos. Flash utiliza una nomenclatura relacionada con el sistema de archivos, y luego organizarlos en carpetas también se verá reflejado en la importación de las clases. Por ejemplo, si creamos la secuencia de las carpetas "mylibrary / graphics / complot" e insertar nuestra propia clase de ActionScript "PlotClass.as" cuando vamos a importar la clase que debemos utilizar:
1
| grafica . plot . PlotClass ; de importación de gráficos. MyLibrary trama. PlotClass.; |
Si la biblioteca (carpeta) "mylibrary" no está en la carpeta de película o proyecto, utilice el flash la configuración de publicación para seleccionar la ruta:

Más información ...
Cuando se "activa", un evento de un contexto del objeto, que es el objeto primario que representa el ámbito de todas las variables, se convierte en el objeto en sí mismo. Esta característica, propia de la programación orientada a objetos, puede ser desorientador que causan los errores y bugs en el código. Por otra parte, en ciertas situaciones, puede impedir el acceso a algunas de las variables "antes de" disponible.
En primer lugar vemos una función de ActionScript relacionado con la gestión de contexto que, si se incluye, nos va a salvar un par de horas de pruebas innecesarias. Cuando tenemos que hacer con los gráficos o clips de película simplemente anidados dentro de unos a otros, la propiedad _parent , la resolución de problemas de contexto. Por ejemplo, si el clip de película padre_mc contiente figlio_mc otro clip de película y utilizar el siguiente código:
1 2 3 4 5
| / / Código en el interior padre_mc ( ) { figlio_mc. onRelease = function () { this ) ; // figlio_mc trace (this); / / figlio_mc this . _parent ) ; // padre_mc trace (this. _parent); / / padre_mc } |
Risalisre el "padre", entonces, es clara e inmediata.
Con las clases de puros, sólo código, o la extensión de la propiedad MovieClip _parent no está disponible y podría complicar las cosas! Immaginiiamo tener una clase MyClass :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| MovieClip { Clase MyClass se extiende MovieClip { MyClass function () { / / Constructor } / / myMethod function () { this ) ; // myClass trace (this); / / miClase ; var num = 5; ; var cp = this; .... [ un oggetto ] ; var myObject = new [un objeto]; ( ) { myObject. onLoad = function () { this ) ; // myObject trace (this); / / myObject cp ) ; // myClass trace (CP); / / miClase } } |
, ovvero il puntatore alla classe MyClass . El contexto de MyMethod() es, por supuesto, this , que es el puntero a la clase MyClass . . La variable num , por ejemplo, tiene un ciclo de la vida encerrada dentro del método MyMethod() . Por lo tanto, sólo es visible en el método y serán destruidos a la salida. . Lo mismo para la variable myObject que sin embargo se inicializa un evento, en este caso onLoad . lasciandoci, apparentemente, senza il puntatore alla classe madre myClass . Cuando se dispara onLoad() se convertirá en el contexto myObject dejando, al parecer, sin el puntero a la clase padre myClass . , ha lo stesso contesto della variabile myObject ! Una mirada más de cerca el código vemos que la variable cp , que se define en el método myMethod() , tiene el mismo contexto de la variable myObject ! dell'oggetto myObject in quanto condivide con esso lo stesso contesto. De hecho, la variable cp (puntero de la clase) será visible en el método onLoad objeto myObject ya que comparte el mismo contexto. ha necessità di “vivere” più al lungo del previsto visto che ha “allocato” un evento (di tutto questo se ne occupa Flash a nostra “insaputa”). De hecho, el método de myMethod() no sólo porque el objeto se cancela la asignación myObject tiene la necesidad de "vivir" en el más de lo esperado, ya que ha "asignado" un evento (todo esto se trata de Flash en nuestro "desconocido").
Asesoramiento
Para los eventos asociados a los botones o clips de película un buen hábito sería el uso de la siguiente forma:
1 2 3 4 5
| my_mc onRelease = myOnRelease.; myOnRelease función () { this ) ; // _root trace (this); / / _root "Click me" ) ; trace ("Haga clic en mí"); } |
En lugar de la más rápida e inmediata:
1 2 3 4
| ( ) { my_mc. onRelease = function () { this ) ; // my_mc trace (this); / / my_mc "Click me" ) ; trace ("Haga clic en mí"); } |
La ventaja de usar una función externa es tener un contexto neutral y la posibilidad de acceder a la función, independientemente del MovieClip que lo controla. En el segundo caso, por ejemplo, si quería forzar la ejecución del código relacionado con el "clic" del clip de película se debe utilizar un código de este tipo:
1
| ; . my_mc onRelease (); |
En la práctica, que yo llamo el evento como si se tratara de un método. Sin embargo, tengo que - de hecho - para que el clip de película my_mc . De cualquier manera, sin embargo, puede ejecutar el código directamente llamando myOnRelease() . Obviamente, como se muestra en los ejemplos, ojo a los contextos. . En el primer caso el contexto de myOnRelease() es el de la madre objeto en el que está escrito, por ejemplo, _root . En el segundo caso, en lugar, el contexto es siempre el objeto MovieClip my_mc !
Obligar a un contexto diferente
Concluimos con algunos trucos útiles en muchas circunstancias. in grado di forzare un contesto di un metodo o funzione. Flash proporciona una biblioteca, mx.utils con un objeto Delegate puede obligar a un contexto de un método o función. Su uso es muy sencillo:
1 2 3 4 5 6 7 8
| utils . Delegate ; .. importación mx utils delegado; / / // puntatore ad un MovieClip my_mc var, / / puntero a un clip de película // un bottone my_btn var, / / un botón myFunction function () { this ) ; trace (este); } create ( my_mc , myFunction ) ; my_btn onPress = Delegado creado (my_mc, myFunction)..; |
El evento onPress my_btn los puntos de botones para una "nueva" función creada precisamente con el my_mc contexto. Al hacer clic en el botón my_btn, el código que se ejecuta en el myFunction() tendrá como my_mc contexto!
Más información ...
Últimos Comentarios
Marcos : Muchas gracias, he encendido
Lo resuelto mediante el establecimiento de [cc_objc] / / OptionViewController.m - ...
Giovambattista Fazioli : @ Marcos: Le sugiero que pensar en un enfoque más correcto. Si ejecuta la subclase de la ficha ...
Marcos : Disculpe el spam .. Me di cuenta de que hay un error .. aquí es la corrección [cc_objc] / PrimaClasse.h **** / # import ...
Marco : olvidado .. en [ICC] OptionViewController [/ cci] para [CCI] @ syntetize [/ cci] puse el delegado
luis : muy clara y sencilla tengo que admitir que escribir un pa casi no utilizan los delegados creados por ...