Deux fois par mois, nous revoyons certains des articles préférés de nos lecteurs dans l’histoire d’Activetuts +. Ce tutoriel a été publié pour la première fois en octobre 2009 (et a amené Michael à être invité à devenir Activetuts + Tech Editor!)
C'est une technique très simple que vous pouvez utiliser pour ajouter une illusion de profondeur à n'importe quel jeu à défilement horizontal. Pendant que j'explique comment cela est réalisé, nous allons également examiner la possibilité de créer des arrière-plans se répétant à l'infini..
Vous pouvez voir la base défilement parallaxe effet au travail dans la démo. En ajustant les vitesses de défilement de certains objets, il est possible de modifier leur proximité ou leur éloignement..
Ce tutoriel expliquera comment coder l'effet et comment faire en sorte que la caméra du jeu semble suivre la voiture. Enfin, il expliquera comment créer des arrière-plans se répétant à l'infini, comme dans Scooby Doo.
Si vous utilisez Flash, créez un nouveau fichier Flash ActionScript 3.0. Définissez la taille de la scène comme vous le souhaitez. J'ai choisi le défaut 550 par 400 pixels.
Si vous n'utilisez pas l'IDE Flash, ne vous inquiétez pas. Il suffit de créer un nouveau projet AS3. Le fichier zip contient un fichier SWC avec tous mes graphiques, vous pouvez donc les utiliser simplement en les ajoutant à votre bibliothèque. Ignore toutes les étapes du dessin si tu le fais.
Si vous sont en utilisant l'IDE Flash mais vous ne voulez rien dessiner, le zip contient également un fichier FLA contenant tous mes MovieClips :)
Créez un nouveau symbole MovieClip et dessinez une voiture. Vous pouvez l'animer si vous le souhaitez. Voilà le mien:
Essayez de centrer la voiture de sorte que son point d’immatriculation (la petite croix) soit à peu près à mi-chemin. Cela permettra à la caméra de le suivre plus tard..
Cliquez avec le bouton droit sur le symbole de votre voiture dans la bibliothèque et sélectionnez Propriétés:
Donnez une classe à votre voiture (Voiture va faire) et vérifier la Exporter pour ActionScript boîte (cela nous permet d'accéder à la voiture en utilisant le code). Aussi, vérifiez la Exporter en première image box (sinon, il faudra faire un préchargement).
Créez un autre nouveau symbole, mais cette fois dessinez une route:
Faites-le plus large que la scène, mais contrairement à la voiture, alignez le point d'alignement avec le bord gauche de la route. Cela aidera plus tard, lorsque nous aurons besoin de le transformer en un motif répétitif.
Comme pour la voiture, donnez une classe à la route, exportez-la pour ActionScript et exportez-la dans la première image..
Créez un nouveau fichier AS et collez-y le code suivant:
package import flash.display.MovieClip; Classe publique ParallaxDemo étend MovieClip fonction publique ParallaxDemo ()
Enregistrer ceci sous ParallaxDemo.as, dans le même dossier que votre fichier FLA (ou votre projet, si vous n'utilisez pas l'EDI).
Si vous utilisez l'EDI, assurez-vous de définir ceci comme classe de document dans le panneau de propriétés de votre document:
Vous ne savez pas ce que nous faisons ici? Découvrez mon petit conseil sur l'utilisation d'une classe de document.
Créez de nouvelles instances de votre voiture et de votre route dans le fichier AS: (lignes 6, 7, 11, 12)
package import flash.display.MovieClip; public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route ();
Si vous utilisez mes graphiques, vous pouvez simplement copier le code suivant (lignes 14-17):
package import flash.display.MovieClip; public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); car.x = 275,0; car.y = 235,0; route.x = 0,0; road.y = 294,0;
Sinon, vous devrez déterminer où placer votre voiture et votre route au départ. Créez un nouveau calque dans la timeline de votre FLA, puis transformez-le en calque guide en cliquant dessus avec le bouton droit de la souris et en sélectionnant Guider. Flash ignorera tout ce que vous ferez dans cette couche lorsqu'il créera un fichier SWF. Alors, faites glisser votre voiture et les symboles de route ici..
Assurez-vous que le bord gauche de votre route est aligné sur le bord gauche de la scène et que la voiture est à peu près au centre (horizontalement). Puis ajustez-les pour qu'ils s'emboîtent l'un dans l'autre:
Maintenant, prenez mon code ci-dessus et ajustez-le pour qu'il corresponde aux coordonnées x et y de votre voiture et de votre route. En cliquant sur votre voiture ou sur votre route, vous pourrez voir ces valeurs dans le panneau Propriétés..
Si vous testez votre film maintenant, vous ne verrez rien. Nous devons ajouterChild () la voiture et la route à la scène:
fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); car.x = 275,0; car.y = 235,0; route.x = 0,0; road.y = 294,0; stage.addChild (route); stage.addChild (voiture);
(Assurez-vous d'ajouter la route en premier, sinon la voiture sera recouverte!)
Testez votre film maintenant, et il devrait ressembler à ceci:
Génial! Bon, d'accord, ce n'est pas encore spectaculaire. Mais maintenant que la configuration est terminée, nous pouvons rendre cela plus intéressant. Pour commencer, faisons bouger cette voiture?
Modifiez votre classe de document pour ajouter un écouteur d’événement à déclencher sur chaque image: (lignes 4, 23, 26-29)
package import flash.display.MovieClip; import flash.events.Event; public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); car.x = 275,0; car.y = 235,0; route.x = 0,0; road.y = 294,0; stage.addChild (route); stage.addChild (voiture); addEventListener (Event.ENTER_FRAME, onEnterFrame); fonction publique onEnterFrame (evt: Event): void
Si vous avez conservé la cadence par défaut de 12 images par seconde, la fonction onEnterFrame () sera appelée tous les 1 / 12ème de seconde..
Si nous continuons à augmenter la position x de la voiture?
fonction publique onEnterFrame (evt: Event): void car.x = car.x + 10; // Si vous êtes prêt à relever un défi, essayez d'ajouter // des commandes de base du clavier pour permettre au joueur d'accélérer // et de décélérer.
? on peut faire avancer la voiture?
? juste au bord de l'écran!
C'est loin d'être idéal. Après quelques secondes, nous ne pouvons même plus voir la voiture. Faisons en sorte que la "caméra" semble suivre la voiture.
Qu'est-ce que cela veut dire exactement? Eh bien, fondamentalement, nous avons besoin de la voiture pour rester au même endroit, alors que la route semble reculer.
Cela signifie que nous pourrait faire quelque chose comme ça:
fonction publique onEnterFrame (evt: Event): void road.x = road.x - 10;
? mais cela ne ferait que compliquer les choses plus tard. Par exemple, imaginons si nous voulions ajouter d’autres voitures à la route, des bonus, des marées noires, etc. il faudrait déplacer chacun d'entre eux à l'envers dans la fonction onEnterFrame ().
Non, il existe une technique beaucoup plus simple que nous pouvons utiliser. Au lieu d’ajouterChild () - la voiture et la route à la scène, nous créons un nouvel objet, addChild () leur, puis nous nous déplaçons ce objet en arrière dans la fonction onEnterFrame ().
Cela semble plus compliqué que ça. Laissez-moi vous montrer le code actuel:
package import flash.display.MovieClip; import flash.events.Event; public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; public var roadContainer: MovieClip; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); car.x = 275,0; car.y = 235,0; route.x = 0,0; road.y = 294,0; roadContainer = new MovieClip (); roadContainer.addChild (route); roadContainer.addChild (voiture); stage.addChild (roadContainer); addEventListener (Event.ENTER_FRAME, onEnterFrame); fonction publique onEnterFrame (evt: Event): void car.x = car.x + 10; roadContainer.x = roadContainer.x - 10;
Dans lignes 9 et 21 nous créons un nouveau MovieClip vierge appelé roadContainer. Flash définit automatiquement ses valeurs x et y sur 0.
Dans lignes 22 et 23 nous ajoutons la route et la voiture au conteneur de route, au lieu de la scène. Dans ligne 25 nous ajoutons le roadContainer lui-même à la scène - et puisque la voiture et la route sont maintenant ajoutées au roadContainer, cela nous permet de les voir sur la scène.
Ligne 32 est la partie la plus importante. Ici, nous reculons le conteneur roadConter du même montant que celui que nous venons de déplacer. avant. Cela signifie que tout ce qui se trouve à l'intérieur du roadContainer est déplacé de 10 pixels vers la gauche, mais comme la voiture vient d'être déplacée de 10 pixels vers la droite, elle reste au centre de l'écran..
C'est un peu comme monter l'escalier roulant. Si vous montez à la même vitesse que vous descendez, vous ne semblez pas bouger vers une personne qui se tient dans les escaliers à côté de vous..
L'effet global:
La voiture reste au centre! Génial. Eh bien, à part le trou blanc béant. Mais nous y arriverons. Maintenant, si vous voulez ajouter plus de voitures à la route, tout ce que vous avez à faire est d’ajouterChild () à la routeContainer.
Le problème avec le simple fait de déplacer le conteneur dans son ensemble légèrement vers l’arrière est qu’il n’est pas très flexible. Que se passe-t-il si le joueur utilise un bonus pour téléporter la voiture de 100 pixels en avant au lieu de 10? Et si nous voulions que la caméra soit centrée sur une voiture différente?
Lorsque le fichier SWF est chargé pour la première fois, la position x de la voiture est 275 et la position x du roadContainer est 0. Comment évoluent-elles au fil du temps??
Voyez-vous une règle générale reliant les deux? Sinon, regardez ceci:
La connexion est un peu plus évident maintenant! Mettons cela dans le code:
fonction publique onEnterFrame (evt: Event): void car.x = car.x + 10; roadContainer.x = 275 - car.x;
Vous pouvez faire ce que vous aimez avec la voiture maintenant. Accélérez-le, téléportez-le pour transmettre un nombre aléatoire de pixels, arrêtez-le, peu importe! La caméra le suivra quand même.
Et si vous voulez que la caméra suive un objet différent, remplacez simplement car.x avec otherObject.x dans la ligne nous venons de changer.
Il est temps de réparer le vide blanc sans fin du néant au bout du chemin.
Le moyen le plus simple de rallonger la route consiste simplement à ajouter une autre instance du symbole de route à la droite de notre symbole existant, comme suit: (lignes 9, 22, 23, 27)
package import flash.display.MovieClip; import flash.events.Event; public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; public var road2: Road; public var roadContainer: MovieClip; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); route2 = nouvelle route (); car.x = 275,0; car.y = 235,0; route.x = 0,0; road.y = 294,0; road2.x = road.x + road.width; road2.y = road.y; roadContainer = new MovieClip (); roadContainer.addChild (route); roadContainer.addChild (road2); roadContainer.addChild (voiture); stage.addChild (roadContainer); addEventListener (Event.ENTER_FRAME, onEnterFrame); fonction publique onEnterFrame (evt: Event): void car.x = car.x + 10; roadContainer.x = 275 - car.x;
Voici à quoi ressemble le mien quand il est exécuté:
Oh cher. Mieux réparer cet écart.
(Si vous ne dessinez pas vos propres graphiques, passez à l'étape 17.)
Le problème est à la ligne 22 du code ci-dessus, road2.x = road.x + road.width. Les routes largeur la valeur doit être légèrement plus grande que ma route semble effectivement être.
Même si votre route n'a pas le même problème, il se peut qu'elle ne s'emboîte pas parfaitement. Alors, retournez sur votre FLA et faites glisser un autre symbole de route de la bibliothèque vers votre couche Guide..
Assurez-vous qu'il a la même position y que le premier segment de route, puis déplacez-le horizontalement jusqu'à ce qu'il n'y ait plus d'espace libre:
Si les bords de vos deux symboles ne se rejoignent pas parfaitement, double-cliquez sur l'un d'eux. Vous pourrez l'éditer et voir immédiatement comment les modifications que vous apportez affectent l'autre:
Utilisez cette astuce pour ajuster les bords du symbole afin que la jointure soit propre..
À la place d'utiliser largeur de route pour savoir où le deuxième segment de route devrait être placé, nous allons utiliser un numéro que j'appelle le largeur.
Pour trouver ce numéro pour votre route, il suffit de prendre la position x de votre symbole de route le plus à droite (dans votre couche Guide) et de soustraire la position x de votre symbole de route le plus à gauche..
Tout ce que vous faites ici consiste à déterminer le nombre de pixels que doivent séparer vos deux segments de route pour obtenir la même jointure parfaite que vous venez de créer dans Flash..
Créer une nouvelle variable numérique, largeur de la route, et définissez sa valeur sur le nombre que vous avez défini à l'étape précédente: (Si vous utilisez mes graphiques, ce nombre est 653,7.)
public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; public var road2: Road; public var roadContainer: MovieClip; public var roadBreadth: Number; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); route2 = nouvelle route (); largeur de la route = 653,7;
Remplacez la ligne:
road2.x = road.x + road.width;
avec:
road2.x = road.x + roadBreadth;
Maintenant, testez-le. Il devrait y avoir aucun espace:
Génial! Nous courons toujours dans le vide blanc sans fin, bien que?
Nous pourrions créer une route3, une route4 et une route5, etc., en les plaçant chacune à la droite de celle qui les précède, mais quel que soit le nombre de segments que nous avons créés, la voiture finira par atteindre la fin..
Pour une meilleure solution, repensez à votre enfance. Avez-vous déjà joué à ce jeu dans lequel vous prétendez que le sol est en lave, mais vous devez vous rendre à l’autre bout de la pièce? (Si non, bon sang, allez y jouer maintenant, c'est très amusant.)
Je ne sais pas pour vous, mais chez moi, les coussins de canapé étaient considérés comme résistants à la lave, pouvant servir de tremplins. Nous n’avions qu’un couple, ce qui n’était pas suffisant pour atteindre le fond de la pièce - mais j’ai fini par comprendre comment les amener plus loin..
J'allongeais les deux coussins pour faire un petit chemin et me dirigeais vers le deuxième. Ensuite, je prenais celui qui se trouvait derrière moi, le déposais devant moi et le franchissais. En prenant à plusieurs reprises celui qui se trouve derrière moi et en le déplaçant devant moi, je pouvais me rendre où bon me semblait..
Nous pouvons utiliser la même technique pour que la route dure à jamais, sans avoir à utiliser plus de deux segments. Tout ce que nous avons à faire est de détecter quand un segment de route est "derrière" la caméra et de le déplacer devant elle..
Qu'est-ce que je veux dire par "derrière" la caméra? Je veux dire que le bord droit du segment se situe en dehors du bord gauche de la scène. Nous pouvons utiliser cette instruction if pour vérifier que:
si (road.x + roadBreadth + roadContainer.x < 0 ) //road is behind the camera
Curieux de savoir pourquoi cela fonctionne? Sinon, passez à l'étape suivante. Sinon, laissez-moi vous expliquer:
Phew! OK, je l'avoue, c'est assez déroutant. Si vous souhaitez une explication plus approfondie, n'hésitez pas à demander dans les commentaires :)
Maintenant que nous pouvons dire quand le segment de route est derrière la caméra, nous devons le déplacer à nouveau devant la caméra.
Si nous avons déplacé la route à droite par largeur de la route nombre de pixels, il serait exactement au même endroit que l’autre segment de route. Nous devons donc le déplacer vers la droite de deux fois plus:
si (road.x + roadBreadth + roadContainer.x < 0 ) road.x = road.x + (2 * roadBreadth);
Mettez cela dans votre fonction onEnterFrame () et testez-le:
Comme vous pouvez le constater, un segment de route se répète, mais l’autre ne l’est pas encore..
Nous pouvons simplement copier le code ci-dessus pour notre autre segment de route, route2:
fonction publique onEnterFrame (evt: Event): void car.x = car.x + 25; roadContainer.x = 275 - car.x; si (road.x + roadBreadth + roadContainer.x < 0 ) road.x = road.x + (2 * roadBreadth); if ( road2.x + roadBreadth + roadContainer.x < 0 ) road2.x = road2.x + (2 * roadBreadth);
Testez à nouveau:
Fantastique! Un fond à défilement latéral en boucle infinie :) Maintenant, créez l’effet de parallaxe actuel?
(Ignorez cette étape si vous utilisez mes graphiques.)
Nous allons avoir besoin d'un fond répétitif pour montrer le défilement de la parallaxe. J'ai choisi des collines, mais vous pouvez créer des bâtiments, des forêts, des sculptures extra-terrestres - tout ce que vous voulez!
Vous pouvez utiliser quelques astuces pour donner l’impression que vous dessinez est plus loin que la voiture:
Suivez les mêmes étapes de base que nous avons utilisées pour dessiner la route:
Voilà le mien:
Le code concernant les collines est presque exactement le même que celui que nous venons d’écrire concernant les routes. Essayez de l'écrire vous-même. J'ai collé mon fichier AS avec tous les nouveaux ajouts ci-dessous, vous pouvez donc vous y référer si vous le souhaitez:
package import flash.display.MovieClip; import flash.events.Event; public class ParallaxDemo étend MovieClip public var car: Car; route publique var: route; public var road2: Road; public var roadContainer: MovieClip; public var roadBreadth: Number; public var hills: Hills; public var hills2: Hills; public var hillsBreadth: Number; public var hillsContainer: MovieClip; fonction publique ParallaxDemo () car = new Car (); route = nouvelle route (); route2 = nouvelle route (); largeur de la route = 653,7; collines = nouvelles collines (); hills2 = new Hills (); collinesLargeur = 890,5; car.x = 275,0; car.y = 235,0; route.x = 0,0; road.y = 294,0; road2.x = road.x + roadBreadth; road2.y = road.y; collines.x = 0; hills.y = 14,5; hills2.x = hills.x + hillsBreadth; hills2.y = hills.y; roadContainer = new MovieClip (); roadContainer.addChild (route); roadContainer.addChild (road2); roadContainer.addChild (voiture); hillsContainer = new MovieClip (); hillsContainer.addChild (collines); hillsContainer.addChild (hills2); stage.addChild (hillsContainer); stage.addChild (roadContainer); addEventListener (Event.ENTER_FRAME, onEnterFrame); fonction publique onEnterFrame (evt: Event): void car.x = car.x + 10; roadContainer.x = 275 - car.x; si (road.x + roadBreadth + roadContainer.x < 0 ) road.x = road.x + (2 * roadBreadth); if ( road2.x + roadBreadth + roadContainer.x < 0 ) road2.x = road2.x + (2 * roadBreadth); hillsContainer.x = 275 - car.x; if ( hills.x + hillsBreadth + hillsContainer.x < 0 ) hills.x = hills.x + (2 * hillsBreadth); if ( hills2.x + hillsBreadth + hillsContainer.x < 0 ) hills2.x = hills2.x + (2 * hillsBreadth);
(Les nouvelles lignes sont les suivantes: 12-15, 24-26, 35-38, 45-47, 49 et 67-75. Comment avez-vous fait?)
Voici le résultat:
Vous vous demandez peut-être pourquoi j'ai pris la peine de créer un HillsContainer. Si oui, alors bien repéré! Nous pourrions simplement ajouterChild () les collines au roadContainer - mais la création d'un nouveau conteneur pour l'arrière-plan est ce qui nous permet de créer l'effet de parallaxe réel.
L'effet nécessite uniquement de changer une ligne de code:
hillsContainer.x = 275 - car.x;
dans ceci:
hillsContainer.x = (275 - car.x) * 1/5;
Cela fait défiler les collines au 1 / 5ème de la vitesse de la route et de la voiture.
Cela ressemble à ceci:
Vous n'êtes pas obligé d'utiliser 1/5; augmentez ou diminuez cette valeur jusqu'à ce que la vitesse vous convient.
Pourquoi ça marche? Eh bien, rappelez-vous que nous voyons les choses dans un cône de vision; plus on voit quelque chose de loin, plus on en voit. Donc, si nous passons devant deux objets de la même taille, mais qu'un est plus éloigné, le plus proche des deux semblera se déplacer plus rapidement, comme ceci:
Ajoutons un autre calque d'arrière-plan, encore plus éloigné que les collines.
C'est exactement la même chose que de créer la route et les collines, donc je ne vais même pas coller le code cette fois! Je ne ferai que poster une photo de mes montagnes?
? vous dire que la largeur de mes montagnes est 751,5, x est 0 et y est 63,0; rappelez-vous de créer un nouveau MovieClip mountainContainer; et vous faire savoir que mes montagnes défilent au 1/16 de la vitesse de ma route.
Oh, et te montrer le résultat:
Le ciel est beau et facile. Comme c'est très loin, il défile si lentement qu'il semble à peine défiler. Les nuages et les oiseaux se déplacent, bien sûr, et le soleil se lève et se couche, mais rien de tout cela n'est dû à un effet de défilement de parallaxe. Cela signifie que nous n'avons rien à faire dans le ciel!
(L’exception à cette règle est si la caméra voyage vraiment, vraiment rapide - comme la vitesse d'un avion ou d'une fusée. Même alors, assurez-vous de le faire défiler très lentement.)
Donc, inutile de s’inquiéter de la largeur ici ou de la création d’une image qui se répète à l’infini. C'est toujours une bonne idée de faire un skyContainer, cependant, juste pour garder les choses cohérentes. Mon ciel n'est qu'un rectangle bleu:
Si vous le placez à x = 0, y = 0, cela couvrira toute la scène. Voici à quoi cela ressemble dans le fichier SWF:
Nous avons créé beaucoup d'objets d'arrière-plan, mais rien de plus proche de la caméra que la voiture. Comme vous le réalisez sûrement, un tel objet devrait défiler plus rapide que le roadContainer, alors essayons ceci.
Pour mon objet de premier plan, j'ai dessiné un arbre:
L'arbre est un peu différent des autres objets que nous avons fabriqués jusqu'à présent car il n'est pas fait pour faire une boucle - il reste seul, il ne se joindra pas à un autre arbre qui se trouve à côté. Cela signifie que nous n'avons jamais besoin que d'un seul arbre à l'écran à la fois (d'autant plus qu'il est si gros!)
Nous n’avons donc besoin que d’un seul objet Tree dans le code. Écrivez le code pour cet objet. Si vous utilisez mes graphiques, la position x de départ sera 780.0 et la position y sera 175.0..
Comme l'arbre va défiler, nous avons toujours besoin d'un conteneur Tree, et nous avons encore besoin d'un arborescence. Cependant, cette fois, treeBreadth contrôle juste le nombre de pixels entre chaque arbre. J'ai utilisé un joli tour 1000.0 pour le mien.
Comme il n'y a qu'un seul arbre, le code de défilement est beaucoup plus simple:
treeContainer.x = (275 - car.x) * 3; if (tree.x + treeBreadth + treeContainer.x < 0 ) tree.x = tree.x + (2 * treeBreadth);
Rien de compliqué :) Notez qu'il défile trois fois plus rapide que la route. Voici le résultat final:
Toutes nos félicitations! Vous avez créé une caméra à défilement dynamique, des arrière-plans se répétant à l'infini et un effet de pseudo-parallélisme 3D :)
Voici quelques autres choses que vous pouvez faire avec le même code:
Si vous créez un shoot-up et que vous souhaitez que toutes vos explosions apparaissent plus proches de la caméra que vos ennemis, créez simplement un nouveau conteneur d'explosions, ajoutez-le à Child () à n'importe quelle explosion, même vitesse que les ennemisContainer.
Placez le score du joueur, son compteur de points de vie, les boutons Muet et Pause, ainsi que toute autre partie de l'interface de votre jeu dans un même conteneur. Placez ce conteneur devant tous les autres conteneurs, mais ne le faites pas défiler. C'est un moyen facile de séparer la caméra et les ressources d'un jeu de son interface..
Essayez d’avoir un contenant immobile tout en faisant défiler les contenants devant lui et derrière lui dans des directions opposées. Cela crée un effet de rotation sympa, comme on le voit environ cinq minutes après le clip de Blanche-Neige de Disney!
Merci d'avoir lu ce tutoriel; J'espère que vous avez aimé. Si quelque chose n'était pas clair du tout ou si vous souhaitez poser des questions à propos de l'effet, merci de poster un commentaire ci-dessous.
En parlant de commentaires, si vous créez quoi que ce soit à l'aide de ce tutoriel, j'aimerais bien pouvoir poster un lien pour que je puisse le voir :)