====== Animation ======
Un objet Animation est un objet graphique très complet : il peut prendre plusieurs apparences, se déplacer, détecter des collisions, etc.
===== Créer un objet Animation =====
* Créer un objet Animation :
uneAnimation = new Animation()
* Créer un objet Animation en chargeant une image depuis un fichier :
uneAnimation = new Animation("fichier.png")
{{information.png}} L'image chargée est affichée directement
===== Actions =====
==== Position et taille ====
* Placer l’Animation :
uneAnimation.définirPosition(300,200)
uneAnimation.définirPositionCentre(300,200)
/*
*uneAnimation.définirCoordonnéeX(300)
*uneAnimation.définirCoordonnéeY(200)
*/
* Récupérer les coordonnées de l’Animation :
uneAnimation.récupérerCoordonnéeX()
uneAnimation.récupérerCoordonnéeY()
/*
* * Changer la taille de l’Animation :
*
*uneAnimation.définirHauteur(300);
*uneAnimation.définirLargeur(400);
*
* * Récupérer la taille de l'Animation :
*
*uneAnimation.récupérerHauteur();
*uneAnimation.récupérerLargeur();
*/
* Montrer / Cacher l’animation :
uneAnimation.montrer()
uneAnimation.cacher()
==== Gestion des images ====
* Ajouter une image :
uneAnimation.ajouterImage("fichier.png")
* Ajouter une image en l'assignant à un ensemble d'images :
uneAnimation.ajouterImage("fichier.png", "ensemble")
* Supprimer une des images :
uneAnimation.supprimerImage("fichier.png")
* Supprimer les images d'un ensemble d'images :
uneAnimation.supprimerImages("ensemble")
* Afficher une des images :
uneAnimation.afficherImage("fichier.png")
{{information.png}} L’objet Animation prend automatiquement la taille de l’image qu’il affiche.
* Afficher l’image suivante / l'image précédente :
uneAnimation.afficherImageSuivante()
uneAnimation.afficherImagePrécédente()
* Afficher l’image suivante / l'image précédente d'un ensemble d'images :
uneAnimation.afficherImageSuivante("ensemble")
uneAnimation.afficherImagePrécédente("ensemble")
/*
* * << Boucler >> les images, c'est à dire qu'un appel à afficherImageSuivante alors que l'objet affiche la
* dernière image provoquera l'affichage de la première image :
*
*uneAnimation.bouclerImages(true)
*
* * Ne pas << boucler >> les images :
*
*uneAnimation.bouclerImages(false)
*/
/*
*
* * Récupérer le nom de l'image affichée :
*
*uneAnimation.récupérerNomImage()
*
*/
* Rendre une couleur transparente :
uneAnimation.rendreTransparent("couleur")
{{ :objets:couleurs.png |}}
/*
*
* * Définir un niveau de transparence pour toutes les couleurs :
*
*uneAnimation.définirTransparence(50)
*
* {{:objet:information.png |}}le niveau de transparence est un chiffre compris entre 0 (visible)
* et 100 (invisible)
*/
==== Mouvements ====
* Faire bouger l’Animation :
uneAnimation.avancer(50)
uneAnimation.reculer(50)
uneAnimation.monter(50)
uneAnimation.descendre(50)
uneAnimation.allerA(0,0)
* Faire bouger l’Animation sans s’arrêter :
uneAnimation.avancer()
uneAnimation.reculer()
uneAnimation.monter()
uneAnimation.descendre()
ou
uneAnimation.avancerToujours()
uneAnimation.reculerToujours()
uneAnimation.monterToujours()
uneAnimation.descendreToujours()
* Arrêter l’Animation :
uneAnimation.arrêter()
/*
* * Suspendre le mouvement de l’Animation :
*
*uneAnimation.suspendre();
*
* * Reprendre le mouvement de l’Animation :
*
*uneAnimation.reprendre();
*/
* Changer la vitesse :
uneAnimation.définirVitesse(100)
{{information.png}} la vitesse par défaut est de 100. Une vitesse de 0 rend l'Animation immobile.
/*
* * Suivre la souris :
*
*uneAnimation.suivreSouris(true)
*
* * Ne pas suivre la souris :
*
*uneAnimation.suivreSouris(false)
*
*{{:objet:information.png |}}lorsqu'une Animation suit la souris, il suffit de cliquer dessus pour la déplacer.
*/
/*
* * Récupérer la direction de l’objet Animation :
*
*uneAnimation.récupérerDirection()
*
*{{:objet:information.png |}}Cette action renvoie un texte pouvant être : << haut >>, << bas >>, << droite >>,
*<< gauche >>, << haut gauche >>, << haut droite >>, << bas gauche >>, << bas droite >>.
*
*/
* Supprimer l’objet Animation :
uneAnimation.supprimer()
/*
=== Rotations ===
* tourner
{{ :creer:sans_titre.gif?nolink |}}
*/
===== Gestion des événements =====
/*
*
*
* Un objet Animation peut surveiller un certain nombre d'événements qui peuvent se produire :
*
* * Un **changement d'images**
* * Un **clic** de l'utilisateur sur l'objet Animation
* * Un **arrêt de clic** de l'utilisateur sur l'objet Animation
* * Un **mouvement** de l'objet Animation
* * Un **changement de direction** de l'objet
* * L'**arrêt** de l'objet
* * La **collision** avec d'autres objets Animation, [[Suiveur]] ou [[Promeneur]]
* * La **sortie de l'écran** de l'objet Animation
*/
Un objet Animation peut surveiller les collisions qui se produisent avec d'autre objets Animation, [[Promeneur]] ou [[Héros]].
==== Exécuter des commandes ====
* Pour chaque collision, on peut dire à l'objet Animation d'exécuter des commandes :
uneAnimation.siCollision("commande")
* On peut dire à l'objet Animation de n'exécuter des commandes que s'il rencontre un objet particulier, grâce à l'action :
uneAnimation.siCollision("commande", objet)
ou
uneAnimation.siCollisionAvec(objet, "commande")
* On peut également dire à l'objet Animation de n'exécuter des commandes que s'il rencontre une catégorie d'Animations :
uneAnimation.siCollision("commande", "catégorie")
ou
uneAnimation.siCollisionAvec("catégorie", "commande")
* Définir la catégorie d'une Animation :
uneAnimation.définirCatégorie("catégorie")
Si on fait plusieurs fois appel à une des actions ci-dessus, les commandes s'ajoutent. Par exemple :
uneAnimation.siCollision("commande1")
uneAnimation.siCollision("commande2")
L'objet Animation exécutera << commande1 >> puis << commande2 >> dès qu'il détecte une collision.
* Désactiver / Réactiver la détection des collisions :
uneAnimation.surveillerCollisions(false)
uneAnimation.surveillerCollisions(true)
{{information.png}} par défaut, la détection des collisions est activée.
/*
*
*==== Supprimer des commandes ====
*
*Pour dire à un objet Animation d'annuler l'exécution de commandes relatives à un événement, on utilise l'action :
*
*uneAnimation.annulerCommandeEvénement("événement")
*
*<< événement >> peut être égal à :
*
* * << changementImage >>
* * << clic >>
* * << arrêtClic >>
* * << mouvement >>
* * << changementDirection >>
* * << arrêt >>
* * << collision >>
* * << horsEcran >>
*
*{{:objet:information.png |}} si on annule les commandes associées à l'événement << collision >>, cela supprime
*les commandes enregistrées avec les actions siCollision et siCollisionAvec.
*
*/
/*
*==== Afficher les commandes ====
*
*Par défaut, un objet Animation affiche dans la console les commandes qu'il exécute quand un événement se
*produit. Ce comportement peut être modifié :
*
* * Afficher les commandes dans la console :
*
*uneAnimation.afficherCommandes(true)
*
* * Ne pas afficher les commandes dans la console :
*
*uneAnimation.afficherCommandes(false)
*/
/*==== Les témoins ====
*
*Dans certains cas, on peut vouloir récupérer des informations sur les événements qui se sont produits. Pour
*cela, on peut utiliser des objets [[Témoin]]. Il suffit pour cela de les passer en paramètre des actions d'ajout
*de commande :
*
* unTémoin = new Témoin();
*uneAnimation.siChangementImage("commande", unTémoin);
*uneAnimation.siClic("commande", unTémoin);
*uneAnimation.siMouvement("commande", unTémoin);
*uneAnimation.siChangementDirection("commande", unTémoin);
*uneAnimation.siArrêt("commande", unTémoin);
*uneAnimation.siCollision("commande", unTémoin);
*uneAnimation.siCollisionAvec(objet, "commande", unTémoin);
*uneAnimation.siCollisionAvec(liste, "commande", unTémoin);
*uneAnimation.siHorsEcran("commande", unTémoin);
*
*Pour les événements de Collision, de Changement de direction ou de Changement d'image, on peut aussi utiliser
*des objets [[TémoinCollision]], [[TémoinChangementDirection]] et [[TémoinChangementImage]].
*
*==== Témoins embarqués ====
*
*Les objets Animation contiennent eux-mêmes un objet [[TémoinCollision]] et un [[TémoinChangementDirection]], ce
*qui permet d'accéder à des informations sur une collision ou un changement de direction ayant eu lieu.
*
* * Récupérer l'objet ayant provoqué une collision :
*
*uneAnimation.récupérerObjetRencontré()
*
* * Récupérer les coordonnées de la collision :
*
*uneAnimation.récupérerCoordonnéeCollisionX()
*uneAnimation.récupérerCoordonnéeCollisionY()
*
* * Récupérer la direction précédente, en cas de changement de direction :
*
*uneAnimation.récupérerDirectionPrécédente()
*
*===== Zone de collision =====
*
*Pour détecter les collisions, un objet Animation se base sur une zone de collision : seuls les objets croisant
*cette zone seront détectés. Par défaut, cette zone a la même taille que l'objet, mais elle peut être modifiée.
*
* * Définir une zone de collision à partir de marges :
*
*uneAnimation.définirMarges(5,10,20,30);
*
*La zone de collision sera un rectangle dont le bord haut sera à 5 pixels du haut de l'image, le bord bas sera à
*10 pixels du bas de l'objet, le bord gauche à 20 pixels de la gauche de l'objet, le bord droit à 30 pixels à
*droite de l'objet.
*
* * Afficher les marges :
*
*uneAnimation.afficherMarges(true);
*
* * Cacher les marges :
*
*uneAnimation.afficherMarges(false);
*
* * Définir une zone de collision rectangulaire :
*
*uneAnimation.définirRectangleCollision(0,0,100,200)
*
*La zone de collision sera formée par un rectangle dont le sommet est situé au point de coordonnées (0,0), dont
*la largeur est de 100 pixels, et la hauteur de 200 pixels. Les coordonnées du sommet sont exprimées dans le
*repère de l'objet : (0,0) correspond au coin en haut à gauche de l'objet.
*
* * Définir une zone de collision elliptique :
*
*uneAnimation.définirEllipseCollision(150,250,100,200)
*
*La zone de collision sera formée par une ellipse dont le centre est situé au point de coordonnées (150,250),
*dont la largeur est de 100 pixels, et la hauteur de 200 pixels. Les coordonnées du centre sont exprimées dans le
*repère de l'objet : (0,0) correspond au coin en haut à gauche de l'objet.
*
* * Afficher la zone de collision :
*
*uneAnimation.afficherZoneCollision(true)
*
*{{:objet:information.png |}}Cette action est équivalente à **uneAnimation.afficherMarges(true)**.
*
* * Cacher la zone de collision :
*
*uneAnimation.afficherZoneCollision(false)
*
*{{:objet:information.png |}}Cette action est équivalente à **uneAnimation.afficherMarges(false)**.
*
* * Récupérer la liste des objets ([[Animation]], [[Suiveur]] ou [[Promeneur]]) présents dans la zone de
*collision :
*
*uneAnimation.récupérerObjetsChevauchés(uneListe)
*
*Cette action prend en paramètre un objet [[Liste]] qui va être rempli avec la liste des objets détectés.
*/