flash actionscript-3 flash-builder flash-cs5

flash - Cómo crear Preloader en AS3



actionscript-3 flash-builder (5)

Aquí está el artículo sobre cómo crear el preloader Embedded As3 http://www.kirupa.com/forum/showthread.php?351689-actionscript-preloader-in-flash-develop

Mis aplicaciones flash son un poco grandes, así que quiero insertar un preloader en mi aplicación. ¿Puede alguien decirme cómo crear un preloader en una nueva ''Escena'' y cargar otra escena después de completar la precarga?

¡Gracias por adelantado!



También puede usar una biblioteca de terceros como Greensock para precargar ambos antes del inicio de la aplicación y mientras se cargan los archivos de la aplicación.

Yo personalmente uso Greensock y lo recomiendo. Resuelve algunos errores con la clase loaderInfo.

http://www.greensock.com/loadermax/



Actualizar:

Opción 1. Flash IDE, un archivo swf

Para tener un preloader incorporado al compilar con Flash IDE, debe mover su código de Document Class al segundo marco de su archivo FLA (sin el constructor de paquete y clase, por supuesto), y eliminar el archivo .as de Document Class de las propiedades del proyecto. En el primer cuadro, debe colocar dicho código:

stop(); // stops the timeline at preloader frame this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); //additional code to update preloader graphics //.. if (percent == 100) onLoaded(); } function onLoaded() { this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); nextFrame(); }

Una vez que se carga swf, avanza al siguiente cuadro y se debe ejecutar el código de inicialización de la aplicación original. Esto funciona bien si organizó su proyecto de forma que la mayoría de los activos (imágenes, etc.) se encuentran en la Biblioteca Flash IDE y no se cargan en el primer cuadro (puede verificarlo en las propiedades de cada elemento de la biblioteca).

Opción 2. Flash IDE, dos archivos swf

Otra opción, como ya lo recomendó otro comentarista, es mantener su aplicación como está, y crear otro swf liviano que cargue el primero. El código de preloader.swf en el primer fotograma:

var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); loader.load(new URLRequest("path/to/application.swf")); function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); //additional code to update preloader graphics //.. if (percent == 100) onLoaded(); } function onLoaded():void { loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); var application:DisplayObject = loader.content; addChild(application); }

A veces hay problemas adicionales con este enfoque, cuando intenta acceder a la stage desde su Document Class constructor , etc., pero para la mayoría de los casos esto debería hacer el trabajo.

Opción 3. IDE diferente, mi recomendación: FlashDevelop

Si trataste de compilar mi código originalmente publicado con FlashDevelop, Flash Builder o cualquier otro IDE, debería funcionar.

Publicación original:

Aquí hay una configuración básica para un preloader incorporado. Su Document Class debería verse así:

package { import flash.display.Sprite; [Frame(factoryClass=''Preloader'')] //class name of your preloader public class Main extends Sprite { public function Main() { //init } } }

Clase de preloader:

package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.events.ProgressEvent; import flash.utils.getDefinitionByName; public class Preloader extends MovieClip { public function Preloader() { //add preloader graphics //check loading progress this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); } private function onProgress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); if (percent == 100) { this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); onLoaded(); } } private function onLoaded():void { nextFrame(); //go to next frame var App:Class = getDefinitionByName("Main") as Class; //class of your app addChild(new App() as DisplayObject); } } }