Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Para aquellos con posibles problemas con un preloader en Actionscript 3.0

Iniciado por Elthan, 24 de Septiembre de 2008, 05:38:29 PM

« anterior - próximo »

Elthan

No sé cuantos os habréis topado con el típico problema de un preloader y con exportar en el primer frame, pero como creo que es un problema bastante común voy a aportar mi granito de arena (aparte de porque voy a rapiñar ayuda en brevísimo tiempo ;) ).

Seguramente a la hora de hacer un preloader os habréis encontrado con el inconveniente de que la precarga ni siquiera se ve, ya que los símbolos de nuestra librería que tienen la vinculación/linkage a una clase suelen exportarse en el primer frame, y por lo tanto el primer frame no muestra nada más que el fondo de nuestra película hasta que se cargan por completo todos esos símbolos.

Esto es especialmente cierto cuando tenemos una clase principal que gestione la película, cuando eso de modificar las opciones de publicación para exportar en el frame X sirve sólo para que maldigas a alguien porque tu precarga no tira "ni p'alante ni p'atrás". Para esos casos en los que quieres un solo .swf sin un preloader en otro archivo flash, para cuando has buscado 20.000 clases indescifrables para hacer precargas.

Bueno al meollo:
1.   El primer paso es en todo lo que tenga en la vinculación/linkage una clase, desactivar la casilla de exportar en el primer frame. Busca en tu librería todos los símbolos que tengan esa casilla activada.

2.   El segundo es añadir en el primer frame de la película una acción con un código como el siguiente:
stop();

loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
loaderInfo.addEventListener(Event.COMPLETE, completeListener);

function progressListener(e:ProgressEvent):void {
  var loaded:Number = e.bytesLoaded / e.bytesTotal;
  var percent:int = loaded * 100;

  this.loadingText.text = "Loading: " + String(percent) + "%";
  this.loadingBar.scaleX = loaded;
}

function completeListener(e:Event):void {
  loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressListener);
  loaderInfo.removeEventListener(Event.COMPLETE, completeListener);
  gotoAndStop(3);
}

Donde loadingText es el nombre de la instancia de un textfield dinámico que tú mismo incluyes en el escenario del primer frame; y donde loadingBar es también el nombre de la instancia de un símbolo que contiene un rectángulo.

3.   Añadir en un segundo frame todo símbolo de la biblioteca que tenga vinculada una clase. Los sonidos tienen una particularidad y es que deberás añadirlos uno en cada capa, pero en el 2º frame, deja el flujo de cada uno en evento y no hace falta cambiar nada, ya que no llegarán siquiera a reproducirse por el gotoAndStop(3) de antes.

De esta forma el preloader funcionará correctamente y tus símbolos estarán disponibles como clases sin ningún problema.

4.   Añade un tercer frame e incluye una acción que invoque a la función que cree tu juego (p.e.: crearJuego(); ). Para ello deberás olvidarte de usar directamente un constructor de clase, es decir, que si la clase que contiene el código del juego se llama Piratas, la función Piratas() no debes usarla, en vez de ello quita todo el código del constructor y mételo en una función con un nombre descriptivo.

¿Y esto por qué? Porque sino al ser la clase principal de tu película, se ejecutaría al comienzo de la reproducción de la misma.

5.   Por último revisa tus variables de clase, propiedades o como te guste llamarlas (, ya sabes, esas que se declaran al principio de una clase) que instancien un símbolo de la biblioteca. Mira que no hayas inicializado ninguna en su declaración. Por ejemplo:
public class Juego extends MovieClip {
  private var personaje:Heroe=new Heroe();


En vez de eso decláralas pero inicialízalas dentro de la función crearJuego() que te comentaba antes. Es decir las declaras con: private var personaje:Heroe; y luego en la función de inicio: personaje=new Heroe;.

Eso es todo lo que necesitas para tener tu precarga funcionando para que des una buena imagen cuando a aquellos interesados vean tu juego en flashgamelicense.com.

He intentado explicar las cosas lo mejor posible ya que sé que hay gente que se ha metido en AC 3.0 y se consideran mucho más diseñadores que programadores.

Espero que le sirva a alguien. Saludos.
Portal de juegos flash: http://www.torredejuegos.com

urkel

Genial aportacion, seguro que evitas parte de algun dolor de cabeza. La verdad es que jode bastante trabajar tranquilamente y cuando crees tener el juego listo, va y no te funciona el tema del loading, y eso da muy, pero que muy mala imagen.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.