Sujets sur : factoryClass as3
Cours ActionScript 3 ‘factoryClass as3’
Comment créer un préloader en AS3 ?
Commentaires fermés sur Comment créer un préloader en AS3 ?

Cette fois, sur le site bit-101, j’ai trouvé une option de compilation très pratique.
La création d’un preloader en pure AS3 pour les applications flash imposantes (supérieure à 200Ko).
Il suffit pour cela de rajouter une seule ligne de code dans votre classe principale Main.
Très utile pour indiquer à vos visiteurs la progression du chargement de votre application et les inviter à patienter 😉
Dans le cours ci-dessous, apprenez à utiliser cette option de compilation du SDK Flex.
Préloader en AS3
Version démonstration
Ci-dessous, le résultat dans de l’application FLV Slicer.
1 | http://e6msyji6epr.exactdn.com/wp-content/uploads/2011/07/FLV-Slicer-preloader.swf |
Télécharger le code source flv slicer
Vous trouverez l’ensemble du code source commenté pour vous aider dans l’intégration de cette fonctionnalité dans vos applications flash.
Télécharger “FLV Slicer” ex-flv-slicer.zip – Téléchargé 1368 fois – 23,37 MoCi-dessous, une partie de la classe Main modifiée.
[codesyntax lang= »actionscript3″ title= »factoryClass preloader AS3″ bookmarkname= »factoryClass preloader AS3″]
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | package { import flash.events.MouseEvent; import button.ButtonValider; import flash.net.FileReference; import org.bytearray.video.events.SlicedEvent; import org.bytearray.video.FLVSlice; import flash.media.Video; import flash.net.NetStream; import flash.net.NetConnection; import org.bytearray.video.FLVSlicer; import flash.display.Sprite; import flash.events.Event; import com.demonsters.debugger.MonsterDebugger; // permet de créer un preloader en AS3 [Frame (factoryClass = "Preloader")] public class Main extends Sprite { // intègre la video flv directement dans le swf [Embed( source="beyond-black-mesa-trailer.flv", mimeType="application/octet-stream" )] private var flvBytes:Class; private var oNetConnect : NetConnection; private var oNetStream : NetStream; private var video : Video; private var oBtnCut : ButtonValider; private var oBtnPlayPause : ButtonValider; private var oBtnDownload : ButtonValider; private var merged : FLVSlice; private var slicer : FLVSlicer; /** * Constructeur. * */ public function Main() { // attend la fin de l'initialisation de la scène this.addEventListener(Event.ADDED_TO_STAGE, onReady, false, 0, true); } /** * Démarrage de l'application. * */ protected function onReady(event : Event) : void { this.removeEventListener(Event.ADDED_TO_STAGE, onReady); // Init De MonsterDebugger MonsterDebugger.initialize(this); MonsterDebugger.trace(this, "Start Application"); } } |
[/codesyntax]
La classe Preloader.as, celle qui affiche la progression du chargement de l’application.
[codesyntax lang= »actionscript3″ title= »Preloader.as » bookmarkname= »Preloader.as »]
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | package { import flash.ui.ContextMenu; import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.utils.getDefinitionByName; public class Preloader extends MovieClip { // le nom de la classe qui lance l'application, généralement Main private var mainClassPath : String; /** * Constructeur. * */ public function Preloader() { stop(); mainClassPath = "Main"; configureStage(); addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(event : Event) : void { graphics.clear(); if (framesLoaded == totalFrames) { removeEventListener(Event.ENTER_FRAME, onEnterFrame); init(); } else { // affiche une barre de progression var percent : Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal; graphics.beginFill(0x006f77); graphics.drawRect(0, stage.stageHeight /2 - 10, stage.stageWidth * percent, 20); graphics.endFill(); } } /** * Lance l'application swf sur la 2ème frame. * */ private function init() : void { nextFrame();// passe à la frame suivante (notre application) // instanciation de notre application var mainClass : Class = Class(getDefinitionByName(mainClassPath)); if (mainClass) { var app : Object = new mainClass(); addChild(app as DisplayObject); } } /** * Personnalisation des options du stage. * */ private function configureStage() : void { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var menu : ContextMenu = new ContextMenu(); menu.hideBuiltInItems(); contextMenu = menu; } } } |
[/codesyntax]
Et vous, utilisez cette technique de la création d’une frame ?
Ou préférez-vous celle, plus classique, d’un swf léger qui preload votre application flash ?