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 79 80 81
|
la classe drapeau :
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.Sprite;
import flash.geom.Point;
import flash.events.Event;
import flash.filters.*;
import flash.filters.DropShadowFilter;
import flash.filters.DisplacementMapFilter;
import flash.geom.Rectangle;
import flash.net.URLRequest;
import flash.display.Loader;
public class Drapeau extends Sprite
{
private var hauteurFlag = 350; //Hauteur du drapeau
private var largeurFlag = 150; //Largeur du drapeau
private var chargeur:Loader = new Loader();
private var requete:URLRequest;
private var bdMappage:BitmapData = new BitmapData(hauteurFlag + 20, largeurFlag + 20); //Données Bitmap pour le mappage
private var bdFiltre:BitmapData = new BitmapData(hauteurFlag + 20, largeurFlag + 20); //Données Bitmap pour le filtre
//Point de départ du mappage
private var p:Point = new Point();
//Création des ombres sur drapeau
private var bdOriginale:BitmapData = new BitmapData(hauteurFlag, largeurFlag); //Création de donnée bitmap de la taille du drapeau
private var ombreMask:Bitmap = new Bitmap(); //Masque de l'ombre du drapeau (pour cacher les creux sur les bordures)
public function Drapeau(jpgadresse:String)
{
requete = new URLRequest(jpgadresse);
chargeur.load(requete);
addChild(chargeur);
//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);
addEventListener(Event.ENTER_FRAME, flotte);
}
private 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
width = hauteurFlag;
height = largeurFlag;
//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
filters = [deplacement, ombrePortee];
//Boucle de l'animation (retour automatique du point de mappage)
if (p.x >= bdFiltre.width)
{
p.x = 0;
}
}
}
} |
Partager