Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 Changer le nom dun objet/hotspot

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 136

Date d'inscription : 06/04/2016


MessageSujet: Changer le nom dun objet/hotspot   Sam 21 Mai 2016 - 11:09

J'ai remarqué que dans plusieurs jeux, comme par exemple celui de valoulef,
les noms des hotspots/objets affichés à l'écran, évoluent en fonction de la progression du joueur.

Mais la propriété Name des ces éléments est en lecture seule donc je ne vois pas comment modifier les string qui les composent en passant par du code...

Quelle est l'astuce ? grand sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: Changer le nom dun objet/hotspot   Sam 21 Mai 2016 - 17:55

En fait, la description de l'objet/hotspot/personnage*, ne change pas. C'est la chaîne de caractères renvoyée qu'on modifie. En l'occurrence, j'ai d'abord créé un GUI placé en bas de l'écran auquel j'ai ajouté un label (appelons-le lblDescription). En tant normal, si l'on souhaite que la description de l'objet survolé soit constante, on entrera @OVERHOTSPOT@ comme texte de ce label, et il affichera donc la description de la zone survolée. Mais si on veut que ce texte varie, il faut aller dans le code.

Avant cela, rappelons que les objets et hotspot dépendent de la pièce dans laquelle on se trouve, et le plus simple/sûr est de faire appel aux propriétés personnalisées. Prenons le cas des portes dans L'Affaire Aspirox : selon qu'on a visité ou non la pièce, la description affichera "Pièce inconnue" ou le contenu de la pièce concernée. Il y a plusieurs solutions, personnellement j'ai choisi d'entrer comme description de base pour chaque porte "Pièce Inconnue", puis créé une propriété personnalisée textuelle "Correspondance" (voire "Correspondance2", si je veux ajouter un troisième cas, comme pour le bureau de Lespinas) dans laquelle j'entre la deuxième description, par exemple "Cafétéria". Ensuite il n'y a plus qu'à coder le comportement du label qu'on a créé au début.

Remarque : dans mon cas j'ai utilisé un module pour ne pas avoir à faire un code pour chaque hotspot. Mais pour comprendre le fonctionnement général, on va partir du principe qu'on n'utilise pas ce module. Si tu veux plus d'infos à ce sujet n'hésite pas à me demander (ici, même sans module on pourrait créer une autre propriété personnalisée pour se simplifier la vie, mais je n'entre pas dans les détails pour le moment sinon on va se perdre en route).

On commence par définir une variable String qui contiendra la chaîne de caractère qu'on affichera ensuite. Puis on va définir le texte à attribuer selon ce qui est survolé.

Code:

function repeatedly_execute(){
String Description;

Hotspot* hsurvol = Character.GetAtScreenXY(mouse.x, mouse.y);
if ((hsurvol != null) {
  if ((hsurvol.GetTextProperty("Correspondance") == "Cafétéria") && (HasPlayerBeenInRoom(1))) Description = hsurvol.GetTextProperty("Correspondance");
  else if ((hsurvol.GetTextProperty("Correspondance") == "Bureau Inoccupé") && (HasPlayerBeenInRoom(2)) Description = hsurvol.GetTextProperty("Correspondance");
  else if ((hsurvol.GetTextProperty("Correspondance") == "Bureau du Designer") && (HasPlayerBeenInRoom(3)) Description = hsurvol.GetTextProperty("Correspondance");
//Comme l'effet est le même selon ces 3 conditions, on aurait pu coder tout ça sur une seule ligne, mais ce sera plus clair de cette manière.
  else Description = hsurvol.Name;
}

Attention : ce code est donné à titre indicatif, il contient peut-être quelques petites erreurs.

Il n'y a plus qu'à associer le texte du label qu'on a créé à la variable Description :
Code:
lblDescription = Description;

Après la méthode dépendra de ce que tu veux faire précisément, dans certains cas tu devras créer des variables globales, pour vérifier si le joueur connait déjà le nom d'un personnage par exemple, etc... À noter que ce code ne change pas la description des hotspot dans l'absolu, mais simplement le texte de l'étiquette (label). Si tu veux utiliser cette description à plusieurs endroits, il faudra coder la variable Description sous la forme d'une fonction.

J'espère ne pas avoir été trop confus. Remercions Kitai (et peut-être Billbis ?) dont j'ai en partie repris ici les conseils qu'il m'avait donné quand je m'étais trouvé devant ce problème à l'époque. clin d\\\\'oeil
Edit : En fait je n'arrive pas à remettre la main sur cette explication précise (j'ai juste trouvé des trucs qui tournent autour) donc si ça se trouve, j'avais en fait fait tout ça avec mes petits doigts, va savoir !
Ah si, c'est surtout ici que j'ai compris le principe : http://adventuregamestudio.fr-bb.com/t2099-resolu-plusieurs-walk-behinds-area-description-objets#33122
Mais du coup le problème était assez différent, même si le principe est un peu le même. Ce lien peut être intéressant à consulter en ce qui concerne les descriptions "dynamiques".



*J'avais commencé à évoquer le cas particulier "personnage" dans mon explication, mais il se trouve que dans ce cas, la variable Name n'est pas en lecture seule. Le problème ne se pose donc pas (je n'en avais d'ailleurs pas tenu compte dans mon code).

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 136

Date d'inscription : 06/04/2016


MessageSujet: Re: Changer le nom dun objet/hotspot   Sam 21 Mai 2016 - 19:20

Merci pour ta réponse, j'adore le concept !

Du coup j'ai retrouvé ton ancien topic (je suis passé à côté en cherchant ce matin...)

Je n'ai encore jamais utilisé les propriétés personnalisées et même si j'ai déjà beaucoup avancé dans mon jeu, je vais tenter d'implémenter ça.

Vous êtes trop forts les mecs !

Revenir en haut Aller en bas
Voir le profil de l'utilisateur
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 1278

Age : 27

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: Changer le nom dun objet/hotspot   Sam 21 Mai 2016 - 20:03

Les propriétés personnalisées sont assez simples à utiliser, tu verras. Et en l'occurrence pour le coup des portes, tu pourrais te passer de module pour généraliser le truc en ajoutant une propriété personnalisée nommée par exemple "destination" qui serait un int correspondant au numéro de la room associée à la porte.

Du coup tu pourrais faire un truc du style :
Code:
int Destination = hsurvol.GetProperty("Destination");
if ((hsurvol.GetTextProperty("Correspondance") != null) && (hsurvol.GetTextProperty("Correspondance") != "") && (HasPlayerBeenInRoom(Destination)) Description = hsurvol.GetTextProperty("Correspondance");

Et ça te fait un code plus léger surtout si tu as beaucoup de portes (plus besoin de le faire hotspot par hotspot).

_________________
"Je pense que la Terre tourne autour du soleil à une vitesse de 30 kilomètres par seconde et que je suis là, accroché à ce bolide de feu qui fonce d'un infini à un autre, accroché à une table, suspendu dans le vide, pendant que, sérieusement, drogué, abruti, inconscient, j'affirme que nous sommes désolés d'apprendre la perte d'un colis expédié le 4 et que nous ferons l'impossible pour réparer cet incident."

L'Employé, Jacques Sternberg.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2431

Date d'inscription : 01/08/2006


MessageSujet: Re: Changer le nom dun objet/hotspot   Sam 21 Mai 2016 - 20:07

Petite note pour signaler l'existence de la fonction String.IsNullOrEmpty qui économise un peu de code dans ton exemple valoulef :
Code:
int Destination = hsurvol.GetProperty("Destination");
if (!String.IsNullOrEmpty(hsurvol.GetTextProperty("Correspondance")) && (HasPlayerBeenInRoom(Destination))
  Description = hsurvol.GetTextProperty("Correspondance");

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php En ligne
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue


Nombre de messages : 136

Date d'inscription : 06/04/2016


MessageSujet: Re: Changer le nom dun objet/hotspot   Sam 21 Mai 2016 - 21:26

Tout fonctionne et c'était assez simple à mettre en place.
Merci pour votre aide !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Changer le nom dun objet/hotspot   Aujourd'hui à 17:22

Revenir en haut Aller en bas
 
Changer le nom dun objet/hotspot
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Changer l'état d'un objet
» Changer la hauteur du placement d'un objet
» [résolu]Vérifier si un objet/hotspot/personnage a déjà été cliqué
» Condition [Si objet possédé] & Walk to hotSpot ?!
» [Réglé] Curseur changeant au survol d'un objet

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: