Prérequis:
Avoir installé la classe TweenMax.
Avoir quelques bases en as3.
Apercu:
1°) Le document
Commençons par ouvrir un nouveau document de 450 par 450, 25 ips et choisissez une couleur qui vous plaît.
2°) Création des pages
Maintenant, il va falloir commencer par créer nos trois pages, pour la première, sélectionner l'outil rectangle (r) et tracez un carré de 150 pixels par 150. Sélectionnez le, puis convertissez le en symbole de type clip (raccourcie "F8"), donnez-lui un identifiant (peut importe) et choisissez "p1" comme nom d'occurrence (ceci est très important pour la suite).
Une fois que ceci a été fait, nous devons entrer à l'intérieur en double cliquant dessus, créez trois nouveaux calques: un pour le titre, l'autre pour le contenue textuel et le dernier pour la déco:
Pour le texte, je vous conseille d'utiliser une police plus petite ou égale à 11, et de choisir "anti-alias-pour l'animation".
Revenez sur la scène, puis sélectionnez votre page, faites un "ctrl+c" pour la copier, puis "ctrl+shift+v" pour la coller en place, déplacez la copie de page et en faisant un clic droit dessus, choisissez "dupliquer le symbole", donnez-lui un autre identifiant et choisissez "p2" comme nom d'occurrence.
Modifier ensuite le contenu de cette page à votre guise.
Répétez l'opération une dernière fois pour la troisième page: copie, duplication, occurrence "p3" et modifications.
Voilà, à ce stade, vous devez avoir trois pages distincts ayant respectivement les noms d'occurrences "p1", "p2", "p3".
Placez ces trois pages à l'extérieur de la scène, "p1" à gauche, "p2" en bas et "p3" à gauche.
3°)Le bouton "entrer"
Revenons sur la scène principale, puis créons deux nouveaux calques, un pour le bouton "entrer" et l'autre pour les actions.
Comme vous vous en doutez, il va falloir créer ce fameux bouton "entrer". Placez-vous donc sur le bon calque et commencez par tracer un rectangle, convertissez le en clip, ensuite, donnez-lui "entrer" en identifiant et cocher "exporter pour actionscript". Dans "classe" précisez: "Entrer" (avec une majuscule).
Revenez sur la scène principale et supprimez le calque qui contient le bouton fermer et donc son contenu.
4°) Les actions
Placez-vous sur le calque "actions" et faites "F9" pour ouvrir le panneau des actions. Nous allons donc commencer à coder notre application.
Nous commençons par faire nos imports:
- Code:
//----------------------------------○○○__Imports
import gs.TweenMax;
import gs.easing.Circ;
import gs.easing.Back;
Ensuite nous devons instancier les variables qui seront utilisés par la suite:
- Code:
//----------------------------------○○○__vars
var p1Zoom:int = 0;
var p2Zoom:int = 0;
var p3Zoom:int = 0;
var centreX:int = stage.stageWidth/2;
var centreY:int = stage.stageHeight/2;
var pWidth:Number = 150;
var pHeight:Number = 150;
Nous devons maintenant gérer le bouton "entrer":
- Code:
//----------------------------------○○○__entrer
var entrer:Entrer = new Entrer();
addChild( entrer );
entrer.x = centreX;
entrer.y = -100;
entrer.buttonMode = true;
TweenMax.to(entrer,.9,{y:centreY});
Il va falloir ensuite créer nos écouteurs:
- Code:
//----------------------------------○○○__Listener
addEventListener("mouseOver",over);
addEventListener("mouseOut",out);
addEventListener("mouseUp",clic);
entrer.addEventListener("mouseUp",entre);
Passons au vif du sujet est initialisons notre projet après clic sur le bouton "entrer":
- Code:
//----------------------------------○○○__Init
function entre(e:MouseEvent):void{
TweenMax.to(entrer,.9,{y:-100, alpha:0, onComplete:suppEntrer});
function suppEntrer(){
removeChild(entrer);
entrer = null;
System.gc();
TweenMax.to(p1,.6, {x:centreX-pWidth, y:centreY, alpha:.5});
TweenMax.to(p2,.6, {x:centreX, y:centreY, alpha:.5});
TweenMax.to(p3,.6, {x:centreX+pWidth, y:centreY, alpha:.5});
}
}
Nous créons donc la fonction "suppEntrer". Dans cette fonction, nous passons le bouton "entrer" à null et nous appelons le ramasse miette pour qu'il le supprime définitivement.
Pour finir, nous utilison la classe TweenMax pour repositionner nos pages correctement sur la scène et leurs donner un alpha à 50%.
Passons ensuite aux fonctions over et out:
- Code:
//----------------------------------○○○__fonctions over et out
function over (e:MouseEvent):void{
var page:MovieClip = (MovieClip)(e.target);
TweenMax.to(page,.5,{alpha:1});
}
function out (e:MouseEvent):void{
var page:MovieClip = (MovieClip)(e.target);
TweenMax.to(page,.5,{alpha:.4});
}
Maintenant nous allons coder la fonction la plus importante, en effet c'est celle qui nous permettra de zoomer sur la page, tout en lui donnant un effet de repositionnement.
- Code:
//----------------------------------○○○__fonctions clic
function clic (e:MouseEvent):void{
var page:MovieClip = (MovieClip)(e.target);
if (e.target.name == "p1"){
p1Zoom ++;
setChildIndex(page, 2);
removeEventListener("mouseOut",out);
TweenMax.to(page,.5,{alpha:1, x:centreX,onComplete:agrandi1});
function agrandi1():void{
if(p1Zoom == 1)TweenMax.to(page,.7,{width:448, height:448, ease:Back.easeOut});
}
if (p1Zoom == 2){
TweenMax.to(e.target,.4,{width:150, height:150,ease:Circ.easeOut, onComplete:imp});
removeEventListener("mouseOut",out);
function imp(){
setChildIndex(page, 0);
TweenMax.to(page,.3,{alpha:.5, x:centreX-pWidth});
addEventListener("mouseOut",out);
p1Zoom = 0;
}
}
}
//------------------------------------------------------------------------------
if (e.target.name == "p2"){
p2Zoom ++;
setChildIndex(page, 2);
removeEventListener("mouseOut",out);
TweenMax.to(page,.1,{alpha:1, x:centreX,onComplete:agrandi2});
function agrandi2():void{
if(p2Zoom == 1) TweenMax.to(page,.7,{width:448, height:448, ease:Back.easeOut});
}
if (p2Zoom == 2){
TweenMax.to(e.target,.4,{width:150, height:150,ease:Circ.easeOut, onComplete:imp2});
function imp2(){
setChildIndex(page, 0);
TweenMax.to(page,.3,{alpha:.5, x:centreX});
addEventListener("mouseOut",out);
p2Zoom = 0;
}
}
}
//------------------------------------------------------------------------------
if (e.target.name == "p3"){
p3Zoom ++;
setChildIndex(page, 2);
removeEventListener("mouseOut",out);
TweenMax.to(page,.5,{alpha:1, x:centreX,onComplete:agrandi3});
function agrandi3():void{
if(p3Zoom == 1)TweenMax.to(page,.7,{width:448, height:448,ease:Back.easeOut});
}
if (p3Zoom == 2){
TweenMax.to(e.target,.4,{width:150, height:150, ease:Circ.easeOut, onComplete:imp3});
function imp3(){
setChildIndex(page, 0);
TweenMax.to(page,.3,{alpha:.5, x:centreX+pWidth});
addEventListener("mouseOut",out);
p3Zoom = 0;
}
}
}
}
Je vais expliquer le fonctionnement de la première page, sachant que les deux autres utiliserons la même technique:
Tout d'abord, nous regardons si le nom de la page est "p1", si c'est le cas, nous ajoutons 1 à la variable "p1Zoom". Ensuite nous la plaçons au-dessus des autres avec setChildIndex et nous supprimons l'écouteur du rollOver (pour ne plus avoir de transparence pendant la lecture).
Nous utilisons encore une fois la Tween pour recentrer notre page, nous réglons l'opacité sur 100%, une fois la tween terminée, la fonction "agrandi1" est joué. Cette fonction est utilisée pour agrandir notre page sur toute la surface de la scène.
Pour ce qui concerne de la deuxième condition (if(p1Zoom == 2)), celle-ci n'est appelé qu'après deuxième clic sur la page, si deuxième clic il y a, alors nous repositionnons la page à sa place d'origine, nous mettons l'opacité à 50%, puis remettons la profondeur originelle. Pour finir la variable p1Zoom est remise à 0.
Voilà, cette étape est répétée par le nombre de page et seul les positions changent.
Voici le code complet du projet:
- Code:
//----------------------------------???__Imports
import gs.TweenMax;
import gs.easing.Circ;
import gs.easing.Back;
//----------------------------------???__vars
var p1Zoom:int = 0;
var p2Zoom:int = 0;
var p3Zoom:int = 0;
var centreX:int = stage.stageWidth/2;
var centreY:int = stage.stageHeight/2;
var pWidth:Number = 150;
var pHeight:Number = 150;
//----------------------------------???__entrer
var entrer:Entrer = new Entrer();
addChild( entrer );
entrer.x = centreX;
entrer.y = -100;
entrer.buttonMode = true;
TweenMax.to(entrer,.9,{y:centreY});
//----------------------------------???__Listener
addEventListener("mouseOver",over);
addEventListener("mouseOut",out);
addEventListener("mouseUp",clic);
entrer.addEventListener("mouseUp",entre);
//----------------------------------???__Init
function entre(e:MouseEvent):void{
TweenMax.to(entrer,.9,{y:-100, alpha:0, onComplete:suppEntrer});
function suppEntrer(){
removeChild(entrer);
entrer = null;
System.gc();
TweenMax.to(p1,.6, {x:centreX-pWidth, y:centreY, alpha:.5});
TweenMax.to(p2,.6, {x:centreX, y:centreY, alpha:.5});
TweenMax.to(p3,.6, {x:centreX+pWidth, y:centreY, alpha:.5});
}
}
//----------------------------------???__fonctions
function over (e:MouseEvent):void{
var page:MovieClip = (MovieClip)(e.target);
TweenMax.to(page,.5,{alpha:1});
}
function out (e:MouseEvent):void{
var page:MovieClip = (MovieClip)(e.target);
TweenMax.to(page,.5,{alpha:.4});
}
function clic (e:MouseEvent):void{
var page:MovieClip = (MovieClip)(e.target);
if (e.target.name == "p1"){
p1Zoom ++;
setChildIndex(page, 2);
removeEventListener("mouseOut",out);
TweenMax.to(page,.5,{alpha:1, x:centreX,onComplete:agrandi1});
function agrandi1():void{
if(p1Zoom == 1)TweenMax.to(page,.7,{width:448, height:448, ease:Back.easeOut});
}
if (p1Zoom == 2){
TweenMax.to(e.target,.4,{width:150, height:150,ease:Circ.easeOut, onComplete:imp});
removeEventListener("mouseOut",out);
function imp(){
setChildIndex(page, 0);
TweenMax.to(page,.3,{alpha:.5, x:centreX-pWidth});
addEventListener("mouseOut",out);
p1Zoom = 0;
}
}
}
//------------------------------------------------------------------------------
if (e.target.name == "p2"){
p2Zoom ++;
setChildIndex(page, 2);
removeEventListener("mouseOut",out);
TweenMax.to(page,.1,{alpha:1, x:centreX,onComplete:agrandi2});
function agrandi2():void{
if(p2Zoom == 1) TweenMax.to(page,.7,{width:448, height:448, ease:Back.easeOut});
}
if (p2Zoom == 2){
TweenMax.to(e.target,.4,{width:150, height:150,ease:Circ.easeOut, onComplete:imp2});
function imp2(){
setChildIndex(page, 0);
TweenMax.to(page,.3,{alpha:.5, x:centreX});
addEventListener("mouseOut",out);
p2Zoom = 0;
}
}
}
//------------------------------------------------------------------------------
if (e.target.name == "p3"){
p3Zoom ++;
setChildIndex(page, 2);
removeEventListener("mouseOut",out);
TweenMax.to(page,.5,{alpha:1, x:centreX,onComplete:agrandi3});
function agrandi3():void{
if(p3Zoom == 1)TweenMax.to(page,.7,{width:448, height:448,ease:Back.easeOut});
}
if (p3Zoom == 2){
TweenMax.to(e.target,.4,{width:150, height:150, ease:Circ.easeOut, onComplete:imp3});
function imp3(){
setChildIndex(page, 0);
TweenMax.to(page,.3,{alpha:.5, x:centreX+pWidth});
addEventListener("mouseOut",out);
p3Zoom = 0;
}
}
}
}
.
Dernière édition par artkabis le Ven 3 Juil - 2:40, édité 3 fois