Sujets sur : frame
Cours ActionScript 3 ‘frame’
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.
https://www.actionscript-facile.com/wp-content/uploads/2011/07/FLV-Slicer-preloader.swfTé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é 494 fois – 23 Mo
Ci-dessous, une partie de la classe Main modifiée.
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");
}
}
La classe Preloader.as, celle qui affiche la progression du chargement de l’application.
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;
}
}
}
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 ?