Salut à tous, comme j'ai très peu de temps pour moi en ce moment, il est vrai que je poste moins de tutoriel depuis quelques temps, alors pour me faire pardonner, je vous est préparé un (plutôt complet) sur la création d'une galerie 3D avec gestion des commentaires via un fichier xml. Je peux vous dire que j'ai passé pas mal d'heure sur cette application et après pas mal de modifications, j'ai fini par arriver à un résultat plutôt sympa.
Voici votre récompense aprés avoir fait ce tutoriel:
Aperçût_galerie
Le tutoriel:
Comme dailymotion met légèrement trop de temps à valider ma vidéo, j'ai décidé de vous faire ce tutoriel par écrit, bon je sais qu'il y en a qui préfèrent les tutos vidéos, mais là je n'ai pas trop le choix. Donc c'est parti !!!!
Avant toute chose, sachez que ce tutoriel demande un niveau plutôt avancé en actionscript3, donc si vous pensez que votre niveau n'est pas encore à la hauteur, je vous conseille de faire quelques tutos (ou cours) pour vous entrainer avant de faire celui-ci. Après c'est à vous de voir, mais sans aucune connaissance en as3, vous risquez de ne pas comprendre grand-chose à ce qui va suivre.
La première étape consistera à préparer notre projet.
Il va falloir commencer par créer les différents dossiers qui contiendront les éléments liés à l'interface.
•Le premier se nommera "XML" et il contiendra nos commentaires dans un fichier xml.
•Le second se nommera "photos" et il contiendra nos 12 images. Attention, il est important de respecter le nombre d'image total, car pour diminuer ou augmenter celui-ci, vous serez obligé de modifier certain paramètre dans le script.
Les dimensions sont elles aussi importantes. Pour ce projet, j'ai redimensionné toutes mes photos par 450X338. Il vous suffit de les glisser dans photoshop (ou un autre logiciel de retouche d'images) puis de faire "image">>taille de l'image. Choisissez 450 pixels en largeur, sans oublier de cocher "conserver les proportions".
Pour les noms de vos photos, là encore vous devrez respecter un ordre bien précis, qui va de photo1 à photo12. Sans ça, vous aurez quelques problèmes pour la suite du tutoriel.
•Le dernier dossier se nommera "com" et il contiendra un autre dossier nommé "galerie", il sera utilisé pour contenir notre classe "Galerie.as".
Une fois que vous avez préparé votre projet, il va nous falloir préparer notre fichier xml, là encore, il faudra faire attention à l'ordre de vos photos, car les commentaires seront liés à celles-ci.
Voici ce que contient le fichier "com.xml"
- Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<commentaires>
<commentaire nom="categorie_1">
<photo>commentaire par defaut</photo>
<photo>commentaire image1</photo>
<photo>commentaire image2</photo>
<photo>commentaire image3</photo>
<photo>commentaire image4</photo>
<photo>commentaire image5</photo>
<photo>commentaire image6</photo>
<photo>commentaire image7</photo>
<photo>commentaire image8</photo>
<photo>commentaire image9</photo>
<photo>commentaire image10</photo>
<photo>commentaire image11</photo>
<photo>commentaire image12</photo>
</commentaire>
</commentaires>
Nous pouvons nous apercevoir que la hiérachie de nos noeuds se présente ainsi: commentaires>>commentaire>>photo
On peut aussi se rendre compte que pour le second noeud, un identifiant a été ajouté, je les ai créés pour que vous puissiez par la suite, ajouter plusieurs catégories pour modifier facilement les commentaires de la galerie. On peut aussi s'apercevoir que le premier commentaire est en fait un "commentaire par défaut", en effet il faut savoir que lors de l'appel à ce fichier, la première entrée vos 0. Il est donc impératif de combler cette entrée en l'utilisant intelligemment, donc on utilisera l'entrée 0 pour les possible erreurs d'affichages.
Enregistrez ce fichier dans le dossier XML sous le nom de "com.xml".
Voilà, maintenant il va falloir ouvrir le logiciel Flash:
La première chose à faire, est de créer un nouveau fichier (.fla:AS3), Voici comment vous devrez paramétrer celui-ci:
Enregistrer le à la racine de votre projet sous le nom de "album".
Maintenant, nous allons avoir besoin d'une nouvelle classe actionscript3, pour cela faites nouveau>>fichier actionscript
Maintenant nous allons l'enregistrer dans le bon dossier, comme nous l'avons dit plus haut, ce fichier sera situé, dans le dossier "galerie" du dossier "com". Enregistrez le sous le nom de "Galerie" avec une majuscule puisque c'est une classe.
Voilà, nous avons maintenant tous les éléments pour pouvoir commencer à travailler tranquillement. Avant toutes choses, il va falloir relier notre classe avec le fichier "album.fla". Pour faire ceci, repassez sur le fichier "album.fla", puis cliquez en dehors de la scène, ouvrez ensuite le panneau des propriétés, puis dans la partie classe, indiquez comme suit:
Pour vous donner quelques explications sur cette liaison, il faut savoir que notre fichier fla est à la racine du projet, donc pour qu'il puisse communiquer avec le fichier Galerie.as, il faudra lui préciser le bon chemin, donc: il doit entrer dans le dossier "com", puis le dossier "galerie" et enfin il devra cibler le fichier "Galerie" (attention il ne faut pas indiquer le type d'extention:".as").
Maintenant, il faut savoir que nous ne toucherons plus une seule foi au fichier fla, tout se jouera par l'intermédiaire du fichier "Galerie.as". Donc repasser sur le fichier "Galerie.as" et commencez par indiquer le bon package, ce qui donne:
- Code:
package com.galerie
{
}
Si vous avez des erreurs liées à l'import, vous pouvez retrouver ma bibliothèque five3D ICI.
Maintenant placez vous entre les deux accolades ( {} )du package et collez les différents imports:
- Code:
//display
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
//events
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
//net
import flash.net.URLRequest;
import flash.net.URLLoader;
//text
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
//five3D et geom
import five3D.display.Scene3D;
import five3D.display.Bitmap3D;
import five3D.display.Sprite3D;
import flash.geom.ColorTransform;
//TweenLite et easing
import gs.TweenLite;
import fl.motion.easing.Sine;
Maintenant que tous les imports ont été fait, il va falloir créer notre classe de document, celle-ci doit porter le même nom que votre fichier actionscript, dans notre cas notre classe de document étendra la classe native "Sprite". Donc à la suite des imports et avant la dernière accolade, collez ceci:
- Code:
//classe de document
public class Galerie extends Sprite
{
}
Maintenant, il vous faut vous placer entre les accolades de la classe pour créer les différentes variables qui seront utilisées dans notre projet:
Voici ces variables et constantes:
- Code:
//initialisation des constantes
private const maxImg:int = 12;
private const ecart:Number = 60;
private const maxZoomZ:Number = 2500;
//initialisation des variables
private var cheminImg:String = "photos/photo";
private var extensionImg:String = ".jpg";
private var chargementIndex:int = 1;
private var infoChargement:TextField = new TextField();
private var infoImg:TextField = new TextField();
private var images:Array = new Array();
private var loaderImage:Loader;
private var comment:Array = new Array();
private var scene:Scene3D;
private var album:Sprite3D;
private var ombre:ColorTransform = new ColorTransform(.5, .5, .5, 1, 0, 0, 0, 0);
private var lumiere:ColorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
private var modeZoom:Boolean = false;
private var imageZoom:Sprite3D;
private var image3d:Array = new Array();
private var ArrayComm:Array = new Array();
private var chargementXML:URLLoader = new URLLoader();
private var XMLfichier:URLRequest = new URLRequest("XML/com.xml");
Passons en revu les éléments les plus importants:
- Code:
private const maxImg
Nous avons à faire à une constante, à l'inverse d'une variable, celle-ci nous permet de garder une valeur fixe, comme son nom l'indique une constante reste toujours constante.
maxImg contient donc le nombre maximum d'images que contiendra la galerie.
- Code:
private const ecart
Cette constante garde en mémoire l'écart entre les images.
- Code:
private const maxZoomZ
Cette constante sera utilisée pour le zoom après clic.
- Code:
private var chargementIndex
Cette variable est trés importante, car elle contiendra l'index des images (de 1 à 12).
- Code:
private var infoChargement
Cette variable sera utilisée pour afficher le chargement des images
- Code:
private var images
Ce tableau contiendra le nom des images
- Code:
private var comment
Ce tableau contiendra tous les commentaires
- Code:
private var scene
La scene3D
- Code:
private var album
Ici on aurra l'album, qui contiendra les images classées et bien disposés.
- Code:
private var ombre
private var lumiere
- Code:
private var modeZoom
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Voilà, une fois ces variables instanciés, il va nous falloir créer notre constructeur.
Un constructeur est une fonction qui sera automatiquement jouée, elle nous servira donc à initialiser notre application et à préparer la lecture des autres fonctions grâce aux écouteurs. Elle doit toujours être publiques est aussi porté le même nom que votre classe (fichier as).
Toujours dans la continuité de notre code (après les variables) collez ceci: Attention, car à ce stade, vous devez avoir deux accolades en bas de votre code et ceci jusqu'à la fin du tutoriel.
- Code:
//__________________________○○○--Constructeur--○○○________________________\\
public function Galerie() {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
chargementXML.addEventListener( Event.COMPLETE, chargeComplete );
chargementXML.load(XMLfichier);
infoChargement.defaultTextFormat = new TextFormat("Verdana", 10, 0xffffff);
infoImg.defaultTextFormat = new TextFormat("Verdana", 10, 0xffffff);
infoChargement.autoSize = TextFieldAutoSize.LEFT;
infoImg.autoSize = TextFieldAutoSize.CENTER;
infoImg.width = 250;
infoChargement.text = "Chargement des images: " + chargementIndex + "/" + maxImg;
infoChargement.x = (stage.stageWidth - infoChargement.textWidth)/2;
infoChargement.y = (stage.stageHeight - infoChargement.textHeight)/2;
infoImg.x = (stage.stageWidth - infoImg.textWidth)/2;
infoImg.y = stage.stageHeight-50;
addChild(infoChargement);
ChargImage();
}
Dans cette fonction, nous mettons en place le textField qui affichera le chargement de chacune des images nous gérons aussi l'écoute du chargement xml, quand celui-ci est complètement chargé, il nous renvoie sur la fonction "chargeComplete". Une autre fonction est aussi appelée, c'est la fonction "ChargImage()" que nous allons maintenant créer, encore une fois faites attention que le la prochaine fonction soit situé avant les deux dernières accolades:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- Code:
private function ChargImage() {
loaderImage = new Loader();
loaderImage.contentLoaderInfo.addEventListener(Event.COMPLETE, initImage);
loaderImage.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, erreur);
loaderImage.load(new URLRequest(cheminImg + chargementIndex + extensionImg));
chargementIndex++;
}
Etudions cette nouvelle fonction:
Tout d'abord, nous préparons le nouveau loader (loaderImage). Nous écoutons deux événements sur celui-ci: Event.COMPLETE et IOErrorEvent.IO_ERROR. Puis nous implémentons la variable "chargementIndex" pour quelle corresponde au nombre d'images chargées (12).
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Nous devons ensuite créer la fonction InitImage qui survient après l'événement COMPLETE du loaderImage: (attention vous devez toujours avoir en tête que les deux dernières accolade soit en bas de votre code et ceci jusqu'à la fin du tutoriel):
- Code:
private function initImage(pEvt:Event):void {
var image:BitmapData = (pEvt.target.content as Bitmap).bitmapData;
images.push(image);
if (chargementIndex <= maxImg) {
infoChargement.text = "Chargement des images " + chargementIndex + "/" + maxImg;
ChargImage();
} else {
removeChild(infoChargement);
creationAlbum();
}
}
Dernière édition par artkabis le Mer 11 Mar - 10:05, édité 4 fois