Precarga Flash

Buenas, tengo un problema con una precarga flash. Se supone que una precarga flash tiene como función cargar toda la película antes de que sea reproducida para que luego todo se reproduzca bien.
Yo he probado una precarga muy sencilla que va en el fotograma 1:
if (getBytesLoaded() == getBytesTotal()){
gotoAndPlay(20);
}
Luego en el 10 va esto:
gotoAndPlay(1);
Por último en el 20 comienza la película. El problema es que tengo la sensación de que no hace nada. De hecho lo principal que quiero evitar sigue ocurriendo, y es que cuando la animación va por la mitad, se entrecorta, no es fluida.
Una vez que el archivo ha quedado en la caché del navegador si va bien, pero es evidente de que la precarga no va :-(
¿Me puedes aconsejar?
Gracias
Respuesta
1
Lo más probable es que tu precarga este demasiado larga o pesada, no se, imágenes muy grandes o muy complejas, ademas diez frames para una precarga es excesivo. Generalmente una precarga es de 1 frame con un movie clip que es el que tiene la animación.
Intenta simplificar la precarga.
¿Mi precarga es demasiado pesada? No te capto. El archivo swf pesa solo 80 kb. Y el código que va en el fotograma 1 es muy corto.
La idea es que si dicho código detecta que el swf ha sido cargado completamente, salte al fotograma 20 para que se reproduzca todo. Si no pues se supone que al llegar al fotograma 10 vuelve al 1 formando un bucle que debería esperar a que se cargue por completo el swf.
Pero creo que algo no está bien. ¿Me puedes aclarar su sugerencia?
Gracias
Pues ya te di mi sugerencia, Has la precarga en un solo frame y lo más simple que se pueda. Esa es la "regla" para todas las precargas. Por que no me das la dirección en la que puedo ver tu flash para ver cual es exactamente el problema.

3 respuestas más de otros expertos

Respuesta
1
¿Por qué en el fotograma 10 tienes gotoandPlay(1)?
Así es difícil saber donde esta el problema, te aconsejo que mires el diagrama de flujo, cuando estas simulando la animación, veras en el menu de arriba que te poner la opción "Ver" y veras que hay una que es ver diagrama de flujo por fotogramas, ahí puedes ver como va corriendo la animación y ves que que fotogramas se para.
Puede que el problema sea que tengas por ahí un objeto que te pese, una imagen o una música, y en el preload espere a la mitad a que se cargue ese objeto.
Mira lo que te he dicho del diagrama porque eso te puede aclarar donde está el fallo. Mira también si hay algún objeto pesado, y si no le ves solución, mandame el archivo fla a [email protected], y te lo miro.
No te preocupes que eso son problemas que nos pasan a todos al principio pero siempre se solucionan.
Yo uso Flash 8 y no veo lo del diagrama en el menú ver. De todas formas lo que necesito no debe ser nada complicado, de hecho el archivo swf pesa solo 80 kb. Y el código que va en el fotograma 1 es muy corto.
La idea es que si dicho código detecta que el swf ha sido cargado completamente, salte al fotograma 20 para que se reproduzca todo. Si no pues se supone que al llegar al fotograma 10 vuelve al 1 formando un bucle que debería esperar a que se cargue por completo el swf.
Pero creo que algo no está bien. ¿Alguna sugerencia?
Gracias
No, no es esa la manera. Lo del fotograma 10 quítalo, pon el preloader en el fotograma 1. En una capa diferente pon un stop(); también en el fotograma 1.
Una vez que te cargue lo mandas al fotograma 20 o al que sea, pero lo del fotograma 10 quítalo.
Lo que hace esto es que en el fotograma 1 tienes:
 Si (nº de bytes cargados==nº de bytes totales)
      { vete al fotograma 20}
El stop() hace que la película se quede ahí, tasta que a condición se cumpla. Hazlo así a ver si te funciona, si no prueba a poner el stop en el fotograma 2.
Mira en google sobre algún preloader sencillo que suele venir el código en un par de lineas y te explica con imágenes donde debes ponerlo. Suerte y animo.
Respuesta
1
Prueba con este código en la linea de tiempo principal y me dices que tal:
stop();
this.onEnterFrame=function(){
c=this.getBytesLoaded();
t=this.getBytesTotal();
if(c==t){
delete this.onEnterFrame;
gotoAndPlay(20);
}
}
De ese modo solo ocupas un frame y te libras de hacer un ciclo con los frames para simular la precarga. Solo usas este código en el primer frame y debe funcionar. Cualquier duda me avisas.
Respuesta
1
Disculpame por haber demorado tanto la respuesta.
Estas haciendo la precarga mal, el método getBytesLoaded se ejecuta una vez sola y te devuelve lo que se cargo hasta el momento, o sea algunos pocos bytes desde que se ejecuto la película. Lo que tendrías que hacer es poner dentro de un enterFrame ese método y que te devuelva el valor dentro de una variable y recién ahí hacer el if.
this.onEnterFrame = function(){
    cargado = getBytesLoaded();
    total = getBytesTotal();
    if(cargado == total){
        gotoAndPlay()//aca va el frame donde empieza el site.
    }
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas