Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
objets:robot [2015/10/16 14:17] admin créée |
objets:robot [2019/12/09 14:04] (Version actuelle) remi |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Robot ====== | ====== Robot ====== | ||
- | Un objet Robot est un objet [[Héros]] qui possède un comportement particulier : il se déplace de case en case, peut détecter et ramasser des [[item|Items]]. S'il est utilisé en même temps qu'un objet [[Maçon]] ou qu'un objet [[Labyrinthe]], il les détecte automatiquement et se déplace dans le décor créé par ces objets. | + | Un objet Robot est un objet [[Héros]] qui possède un comportement particulier : il se déplace de case en case, peut détecter et ramasser des [[item|Items]]. |
+ | |||
+ | {{ :objets:robot_face_1.png?nolink |}} | ||
+ | |||
+ | S'il est utilisé en même temps qu'un objet [[Maçon]] ou qu'un objet [[Labyrinthe]], il les détecte automatiquement et se déplace dans le décor créé par ces objets. | ||
===== Créer un objet Robot ===== | ===== Créer un objet Robot ===== | ||
Ligne 7: | Ligne 11: | ||
* Créer un objet Robot : | * Créer un objet Robot : | ||
- | <code tangara> | + | <code declick> |
- | bob = new Robot() | + | bob = new Robot() |
</code> | </code> | ||
- | |||
- | * Créer un objet Robot en chargeant une image depuis un fichier : | ||
- | |||
- | <code tangara> | ||
- | bob = new Robot("fichier.png") | ||
- | </code> | ||
- | |||
- | {{information.png}} L'image chargée est affichée directement | ||
===== Actions ===== | ===== Actions ===== | ||
- | ==== Position et taille ==== | + | ==== Actions des objets Héros ==== |
- | * Placer l’Animation : | + | Les objets Robot sont des objets Héros particuliers : ils possèdent donc déjà [[heros|toutes les actions des objets Héros]]. |
- | <code tangara> | + | ==== Actions supplémentaires ==== |
- | uneAnimation.définirPosition(300,200) | + | |
- | uneAnimation.définirPositionCentre(300,200) | + | |
- | </code> | + | |
- | /* | ||
- | * uneAnimation.définirCoordonnéeX(300); | ||
- | * uneAnimation.définirCoordonnéeY(200); | ||
- | */ | ||
- | /* | + | === Déplacements === |
- | * * Récupérer les coordonnées de l’Animation : | + | |
- | * | + | |
- | * uneAnimation.récupérerCoordonnéeX(); | + | |
- | * uneAnimation.récupérerCoordonnéeY(); | + | |
- | */ | + | |
- | /* | + | * Faire bouger le Robot : |
- | * * 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 : | + | Le robot se déplace de case en case. Contrairement aux objets [[Héros]], les déplacements du Robot sont bloquants : les commandes suivantes ne sont exécutées qu'une fois le déplacement terminé. |
- | <code tangara> | + | <code declick> |
- | uneAnimation.montrer() | + | bob.avancer() |
- | uneAnimation.cacher() | + | bob.reculer() |
+ | bob.monter() | ||
+ | bob.descendre() | ||
</code> | </code> | ||
- | ==== Gestion des images ==== | + | * Faire bouger le Robot de plusieurs cases : |
- | + | <code declick> | |
- | * Ajouter une image : | + | bob.avancer(5) |
- | + | bob.reculer(5) | |
- | <code tangara> | + | bob.monter(5) |
- | uneAnimation.ajouterImage("fichier.png") | + | bob.descendre(5) |
</code> | </code> | ||
- | * Ajouter une image en l'assignant à un ensemble d'images : | + | === Tests === |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.ajouterImage("fichier.png", "ensemble") | + | |
- | </code> | + | |
- | + | ||
- | * Supprimer une des images : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.supprimerImage("fichier.png") | + | |
- | </code> | + | |
- | + | ||
- | * Supprimer les images d'un ensemble d'images : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.supprimerImages("ensemble") | + | |
- | </code> | + | |
- | + | ||
- | + | ||
- | * Afficher une des images : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.afficherImage("fichier.png") | + | |
- | </code> | + | |
- | + | ||
- | {{information.png}} L’objet Animation prend automatiquement la taille de l’image qu’il affiche. | + | |
- | + | ||
- | * Afficher l’image suivante / l'image précédente : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.afficherImageSuivante() | + | |
- | uneAnimation.afficherImagePrécédente() | + | |
- | </code> | + | |
- | + | ||
- | * Afficher l’image suivante / l'image précédente d'un ensemble d'images : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.afficherImageSuivante("ensemble") | + | |
- | uneAnimation.afficherImagePrécédente("ensemble") | + | |
- | </code> | + | |
- | + | ||
- | /* | + | |
- | * * << 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 : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.rendreTransparent("couleur") | + | |
- | </code> | + | |
- | + | ||
- | {{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 : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.avancer(50) | + | |
- | uneAnimation.reculer(50) | + | |
- | uneAnimation.monter(50) | + | |
- | uneAnimation.descendre(50) | + | |
- | uneAnimation.allerA(0,0) | + | |
- | </code> | + | |
- | + | ||
- | * Faire bouger l’Animation sans s’arrêter : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.avancer() | + | |
- | uneAnimation.reculer() | + | |
- | uneAnimation.monter() | + | |
- | uneAnimation.descendre() | + | |
- | </code> | + | |
- | + | ||
- | ou | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.avancerToujours() | + | |
- | uneAnimation.reculerToujours() | + | |
- | uneAnimation.monterToujours() | + | |
- | uneAnimation.descendreToujours() | + | |
- | </code> | + | |
- | + | ||
- | * Arrêter l’Animation : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.arrêter() | + | |
- | </code> | + | |
- | + | ||
- | /* | + | |
- | * * Suspendre le mouvement de l’Animation : | + | |
- | * | + | |
- | * uneAnimation.suspendre(); | + | |
- | * | + | |
- | * * Reprendre le mouvement de l’Animation : | + | |
- | * | + | |
- | * uneAnimation.reprendre(); | + | |
- | */ | + | |
- | + | ||
- | * Changer la vitesse : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.définirVitesse(100) | + | |
- | </code> | + | |
- | + | ||
- | {{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 : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.supprimer() | + | |
- | </code> | + | |
- | + | ||
- | ===== 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 : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.siCollision("commande") | + | |
- | </code> | + | |
- | + | ||
- | * On peut dire à l'objet Animation de n'exécuter des commandes que s'il rencontre un objet particulier, grâce à l'action : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.siCollision("commande", objet) | + | |
- | </code> | + | |
- | ou | + | |
- | <code tangara> | + | |
- | uneAnimation.siCollisionAvec(objet, "commande") | + | |
- | </code> | + | |
- | + | ||
- | * On peut également dire à l'objet Animation de n'exécuter des commandes que s'il rencontre une catégorie d'Animations : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.siCollision("commande", "catégorie") | + | |
- | </code> | + | |
- | ou | + | |
- | <code tangara> | + | |
- | uneAnimation.siCollisionAvec("catégorie", "commande") | + | |
- | </code> | + | |
- | + | ||
- | * Définir la catégorie d'une Animation : | + | |
- | + | ||
- | <code tangara> | + | |
- | uneAnimation.définirCatégorie("catégorie") | + | |
- | </code> | + | |
- | Si on fait plusieurs fois appel à une des actions ci-dessus, les commandes s'ajoutent. Par exemple : | + | * Tester si le Robot est sur la sortie d'un [[Labyrinthe]] ou d'un décor construit par un [[Maçon]] : |
- | <code tangara> | + | <code declick> |
- | uneAnimation.siCollision("commande1") | + | bob.estSurSortie() |
- | uneAnimation.siCollision("commande2") | + | |
</code> | </code> | ||
- | L'objet Animation exécutera << commande1 >> puis << commande2 >> dès qu'il détecte une collision. | + | {{information.png}} cette commande renvoie ''%%true%%'' ou ''%%false%%''. Elle peut être utilisée dans un test ''%%if%%''. |
- | * Désactiver / Réactiver la détection des collisions : | + | * Tester si le Robot est sur un [[Item]] : |
- | <code tangara> | + | <code declick> |
- | uneAnimation.surveillerCollisions(false) | + | bob.estSurItem("nom") |
- | uneAnimation.surveillerCollisions(true) | + | |
</code> | </code> | ||
- | {{information.png}} par défaut, la détection des collisions est activée. | + | {{information.png}} cette commande renvoie ''%%true%%'' si le robot est sur un item correspondant à "nom" ou ''%%false%%'' sinon. Elle peut être utilisée dans un test ''%%if%%''. |
- | /* | ||
- | * | ||
- | *==== 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. | ||
- | */ |