ActionScript 3.0, l'essentiel sous la main Adobe Flash Accueil
Fiches
Boutique
Contact
Créer un drapeau
Importer dans votre bibliothèque votre drapeau au format bitmap (JPE, PNG, etc.). Créer un clip, mettez-le dedans, et donnez lui un nom pour exportation.



Sur une image clé vide, insérer ce code :

//Imports Flash
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.geom.Point;
import flash.events.Event;
import flash.filters.*;
import flash.filters.DropShadowFilter;
import flash.filters.DisplacementMapFilter;

//Drapeau
var hauteurFlag = 350; //Hauteur du drapeau
var largeurFlag = 150; //Largeur du drapeau

//Création du drapeau
var drap:MovieClip = new drapeau();
addChild(drap);

//Création de données bitmap pour l'animation (données un peu plus larges que le drapeau)
var bdMappage:BitmapData = new BitmapData(hauteurFlag+20,largeurFlag+20); //Données Bitmap pour le mappage
var bdFiltre:BitmapData = new BitmapData(hauteurFlag+20,largeurFlag+20); //Données Bitmap pour le filtre

//Génère du bruit (Perlin) sur les données bitmap "bdMappage"
bdMappage.perlinNoise(bdMappage.width/2, bdMappage.height/2, 2, 255, true, false, 4, true, null);

//Point de départ du mappage
var p:Point = new Point();

//Création des ombres sur drapeau
var ombre:Bitmap = new Bitmap(); //Ombre du drapeau
var bdOriginale:BitmapData = new BitmapData(hauteurFlag, largeurFlag); //Création de donnée bitmap de la taille du drapeau
var ombreMask:Bitmap = new Bitmap(); //Masque de l'ombre du drapeau (pour cacher les creux sur les bordures)
addChild(ombre); //Ajout de l'ombre

//Animation du drapeau
function flotte(e:Event):void
{
//Intensité du vent
var vent:Number = 12;

//Création d'un filtre de mappage dynamique en fonction du vent (à partir des données bitmap initiale "bdFiltre")
var deplacement:DisplacementMapFilter = new DisplacementMapFilter(bdFiltre, new Point(), 1, 1, vent, vent, "color", 1, 0);

//Paramètres du drapeau
drap.width = hauteurFlag;
drap.height = largeurFlag;
drap.y = 100;
drap.x = 100;

//Avancement du point de mappage en fonction du vent
p.x = p.x + vent;

//Répercution du bruit (Perlin) pendant l'avancement du mappage
bdFiltre.copyPixels(bdMappage, new Rectangle(bdMappage.width - p.x, 0, p.x, bdMappage.height), new Point(0, 0));
bdFiltre.copyPixels(bdMappage, new Rectangle(0, 0, bdMappage.width - p.x, bdMappage.height), new Point(p.x, 0));

//Création d'un filtre 'ombre portée' pour le drapeau
var ombrePortee:DropShadowFilter = new DropShadowFilter(5, 45, 0, 0.2, 16, 16, 1, 3, false, false, false);

//Application des filtres au drapeau
drap.filters = [deplacement, ombrePortee];

//Ombrage de la texture du drapeau selon ces mouvements
ombre.bitmapData = bdFiltre; //Récupère les données du bitmap "bdFiltre"
ombre.blendMode = "darken"; //Mode de fusion de l'ombre
ombre.filters = [deplacement]; //Application du même filtre que la drapeau sur l'ombre pour
//avoir une ondulation identique à celle du drapeau
ombre.x = drap.x; //Position l'ombre sur X par-dessus le drapeau
ombre.y = drap.y; //Position l'ombre sur Y par-dessus le drapeau
ombreMask.bitmapData = bdOriginale; //Récupère les données de la taille du drapeau "bdOriginale"
ombreMask.x = drap.x; //Position le masque sur X par-dessus le drapeau
ombreMask.y = drap.y; //Position le masque sur Y par-dessus le drapeau
ombreMask.width = drap.width; //Redimensionne la hauteur du masque par rapport au drapeau
ombreMask.height = drap.height; //Redimensionne la largeur du masque par rapport au drapeau
ombre.mask = ombreMask; //Applique le masque sur l'ombre du drapeau
ombre.alpha = 0.1; //Opacité des ombres du drapeau

//Boucle de l'animation (retour automatique du point de mappage)
if(p.x >= bdFiltre.width)
{
p.x = 0;
}
}
drap.addEventListener(Event.ENTER_FRAME, flotte); //Lance l'animation du drapeau

Aperçus & Sources : (Flash CS4)
Commentaire(s)
Aucun.