Partie I : Les joies de la programmation brute
Etape 1 : Afficher une image
Ce projet flash contient deux images dans sa bibliothèque : la Lame et la Rose. Nous allons afficher la lame.
Copier-collez ceci ("Ctrl + C" puis "Ctrl + V", je précise, sait-on jamais...) dans la fenêtre Actions, et faites "Ctrl + ENTER" :
Citer:
_root.attachMovie('lame','canif',50);
Sauf erreur, une magnifique lame s'affiche en haut à gauche de l'écran.
Explication du miracle :
- On copie l'image dont le nom est "
lame" dans la bibliothèque.
- On affiche cette copie sous le nom (arbitraire) de "
canif".
- On lui donne le numéro "
50".
A savoir sur la numérotation d'images :
- L'image 50 s'affichera DEVANT les images 49, 48, 47...
- Si vous attribuez le numéro 50 à une autre image, elle effacera l'ancienne.
- Vous pouvez attribuer des numéros négatifs.
Etape 2 : Modifier la position d'une imageCopiez-collez ceci, et faites "Ctrl + ENTER" (pareil pour les étapes suivants, les ajouts sont indiqués en
bleu) :
Citer:
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
- "
canif._x" est l'abscisse de l'image (nombre horizontal de pixels entre la
droite de l'écran et le
coin haut-gauche de l'image)
- "
canif._y" est l'ordonnée de l'image (nombre vertical de pixels entre le
haut de l'écran et le
coin haut-gauche de l'image)
- On leur assigne la valeur
100 avec l'opérateur "
=".
Remarques :
- Par défaut, "canif._x" et "canif._y" valent 0 (d'où l'affichage en haut à gauche, à l'étape précédente)
- Vous pouvez entrer des coordonnées décimales ( ex : 83.45), l'image se floutera pour s'afficher "entre deux pixels".
- N'oubliez pas le point-virgule à la fin de chaque ligne de code.
Etape 3 : Aller vers l'EstCiter:
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
function onEnterFrame()
{
canif._x += 1;
}
Vous constatez avec émoi que le canif se barre vers la droite. Explications :
- Ce qui se trouve entre les accolades de "
function onEnterFrame() { ... }" est exécuté à chaque itération, soit 120 fois par seconde.
- "
canif._x += 1" augmente l'abscisse du canif de 1.
Le canif se décale donc d'un pixel vers la droite à chaque itération, soit de 120 pixels par seconde.
Remarques :
- Pour aller vers la gauche, il suffit de remplacer "+= 1" par "-=1"
- Pour modifier la vitesse, remplacez 1 par 2, 3, 0.5, -1...
- Raccourci commode : vous pouvez remplacer "+= 1" par "++" (incrémentation), "-= 1" par "--" (décrémentation).
- Il y a 120 itérations par secondes : c'est le maximum, mais nous verrons plus bas comment modifier cette cadence.
Etape 4 : Aller vers l'Est quand je veux, si je veux Citer:
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += 1;
}
Désormais, le canif ira vers l'Est uniquement lorsque la touche directionnelle droite est enfoncée.
- Nous avons ajouté je que l'on appelle une condition : "
if(truc) machin" signifie que "machin" sera exécuté si la condition "truc" est vraie.
-
Key.isDown(Key.RIGHT) est une condition "vraie" quand la touche directionnelle droite est pressés, et "fausse" quand elle ne l'est pas.
Remarques :
- Vous pouvez changer de touche en remplaçant "Key.RIGHT" par "Key.UP", "Key.LEFT", "Key.DOWN"...
- "Key.TRUC" est un raccourci qui ne fonctionne que pour certaines touches. Pour les autres, vous devrez utiliser leur numéro ASCII, que vous trouverez
>ici<. Par exemple, pour utiliser la touche A, remplacez "Key.RIGHT" par "65".
Etape 5 : Autres directionsCiter:
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += 1;
if(Key.isDown(Key.LEFT)) canif._x -= 1;
if(Key.isDown(Key.DOWN)) canif._y += 1;
if(Key.isDown(Key.UP)) canif._y -= 1;
}
Vous pouvez à présent mouvoir votre canif dans les quatre directions. Nul besoin de commentaire, j'imagine ?
Etape 6 : Une vitesse pour TousCiter:
v=3;
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += v;
if(Key.isDown(Key.LEFT)) canif._x += v;
if(Key.isDown(Key.DOWN)) canif._y += v;
if(Key.isDown(Key.UP)) canif._y += v;
}
On a déclaré une variable v, égale à 3. Il vous suffira de changer sa valeur pour changer la vitesse dans TOUTES les directions.
Attention, malheureux ! Si vous oubliez de déclarer "v=3" en début de programme, le logiciel plantera dès qu'il rencontrera "+= v" (
Quel est donc ce "v" que je ne connais point ?). D'où la nécessité de sauvegarder régulièrement (Ctrl + S).
Etape 7 : Quelques fleurs dans ce monde de brute Citer:
v=3;
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
_root.attachMovie('rose','rose1',1);
rose1._x = 200 ;
rose1._y = 300 ;
_root.attachMovie('rose','rose2',2);
rose2._x = 400 ;
rose2._y = 300 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += v;
if(Key.isDown(Key.LEFT)) canif._x -= v;
if(Key.isDown(Key.DOWN)) canif._y += v;
if(Key.isDown(Key.UP)) canif._y -= v;
}
Nous avons donc fièrement affiché deux roses, "rose1" et "rose2" (cf. étape 1 & 2).
Etape 8 : Rotation Citer:
v=3;
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
_root.attachMovie('rose','rose1',1);
rose1._x = 200 ;
rose1._y = 300 ;
_root.attachMovie('rose','rose2',2);
rose2._x = 400 ;
rose2._y = 300 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += v;
if(Key.isDown(Key.LEFT)) canif._x -= v;
if(Key.isDown(Key.DOWN)) canif._y += v;
if(Key.isDown(Key.UP)) canif._y -= v;
rose2._rotation ++;
}
Chose incroyable, rose2 se met à tourner.
En fait, chaque clip possède une coordonnée x (._x), une coordonnée y (._y) en un angle de rotation en degrés (
._rotation). C'est donc cet angle que l'on augmente d'un degré (via le "++") à chaque itération. Bien entendu, vous pouvez remplacer "++" par "+= 3" ou "-= 2", pour changer la vitesse et le sens de rotation.
Etape 9 : Collision Citer:
v=3;
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
_root.attachMovie('rose','rose1',1);
rose1._x = 200 ;
rose1._y = 300 ;
_root.attachMovie('rose','rose2',2);
rose2._x = 400 ;
rose2._y = 300 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += v;
if(Key.isDown(Key.LEFT)) canif._x -= v;
if(Key.isDown(Key.DOWN)) canif._y += v;
if(Key.isDown(Key.UP)) canif._y -= v;
if(rose1.hitTest(canif._x,canif._y,true)) rose2._rotation ++;
}
Cette fois, rose2 tourne lorsque la pointe du canif touche rose1 (celle de gauche).
Nous avons introduit une nouvelle condition : "hitTest". Elle détecte la collision entre une forme et un pixel. Ici,
- "
rose1" est la forme
- "
canif._x" et "
canif._y" sont le coordonnées x et y du pixel (...c'est à dire le pixel haut-gauche du canif, c'est à dire de sa pointe)
(Remarquez que, pour tester une condition, il suffit d'afficher une image bidon - ici, rose2 - et de la faire tourner si la condition est réalisée. Cela peut servir.)
Etape 10 : Téléportation Citer:
v=3;
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
_root.attachMovie('rose','rose1',1);
rose1._x = 200 ;
rose1._y = 300 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += v;
if(Key.isDown(Key.LEFT)) canif._x -= v;
if(Key.isDown(Key.DOWN)) canif._y += v;
if(Key.isDown(Key.UP)) canif._y -= v;
if(rose1.hitTest(canif._x,canif._y,true))
{
rose1._x = 100 + random(440);
rose1._y = 100 + random(280);
}
}
Cette fois, lorsque vous touchez la rose, cela ne fait plus tourner rose2 (que nous n'avons plus affichée) : cela téléporte rose1.
La méthode est simple :
- random(440) choisit un nombre entier au hasard entre 0 et 440
- random(280) choisit un nombre entier au hasard entre 0 et 280
Donc, lorsque l'on touchera la rose, ses nouvelles coordonnées seront prises au hasard :
- Pour les x, entre 100 et 540
- Pour les y, entre 100 et 380
Etape11 : Touche d'action Citer:
v=3;
_root.attachMovie('lame','canif',50);
canif._x = 100 ;
canif._y = 100 ;
_root.attachMovie('rose','rose1',1);
rose1._x = 200 ;
rose1._y = 300 ;
function onEnterFrame()
{
if(Key.isDown(Key.RIGHT)) canif._x += v;
if(Key.isDown(Key.LEFT)) canif._x -= v;
if(Key.isDown(Key.DOWN)) canif._y += v;
if(Key.isDown(Key.UP)) canif._y -= v;
rose1._rotation ++;
if( rose1.hitTest(canif._x,canif._y,true) && Key.isDown(Key.SPACE) )
{
rose1._x = 100 + random(440);
rose1._y = 100 + random(280);
}
}
Cette fois, nous avons...
- Fait tourné la rose (parce que c'est...
joli)
- Requis, en plus du contact, l'appuie sur la touche "espace" pour téléporter la rose
Explications :
- "if(truc && bidule) machin" : "machin" est exécuté si "truc"
et "bidule" sont vérifiées.
- "if(truc || bidule) commande" : "machin" est exécuté si "truc"
ou "bidule" (...ou les deux) sont vérifiées.
Minute culturelle : "&&" et "||" sont respectivement le ET et le OU logique ; ce sont des opérateurs dits booléens (car ils opèrent sur des propositions pouvant être soit vraies, soit fausses).
C'est tout pour le moment, rompez. Nous verrons par la suite des options plus avancée (zoom, transparence, affichage de séries d'images, sauvegarde en ligne...), mais vous en savez à présent assez pour faire pas mal de choses. Reste à savoir comment importer des images personnalisées ; c'est l'objet de la partie suivante.