Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -40%
-40% sur le Pack Gaming Mario PDP Manette filaire + ...
Voir le deal
29.99 €
-29%
Le deal à ne pas rater :
PC portable – MEDION 15,6″ FHD Intel i7 – 16 Go / 512Go (CDAV : ...
499.99 € 699.99 €
Voir le deal

 

 Changer le nom dun objet/hotspot

Aller en bas 
3 participants
AuteurMessage
Arlann
Cliqueur Amateur
Cliqueur Amateur
Arlann


Nombre de messages : 286

Date d'inscription : 06/04/2016


Changer le nom dun objet/hotspot Empty
MessageSujet: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot EmptySam 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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Changer le nom dun objet/hotspot Empty
MessageSujet: Re: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot EmptySam 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 : https://adventuregamestudio.1fr1.net/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).
Revenir en haut Aller en bas
Arlann
Cliqueur Amateur
Cliqueur Amateur
Arlann


Nombre de messages : 286

Date d'inscription : 06/04/2016


Changer le nom dun objet/hotspot Empty
MessageSujet: Re: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot EmptySam 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 !

Changer le nom dun objet/hotspot 114419
Revenir en haut Aller en bas
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
valoulef


Nombre de messages : 1791

Age : 35

Localisation : Condate

Date d'inscription : 01/08/2011


Changer le nom dun objet/hotspot Empty
MessageSujet: Re: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot EmptySam 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).
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai


Nombre de messages : 2907

Date d'inscription : 01/08/2006


Changer le nom dun objet/hotspot Empty
MessageSujet: Re: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot EmptySam 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");
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Arlann
Cliqueur Amateur
Cliqueur Amateur
Arlann


Nombre de messages : 286

Date d'inscription : 06/04/2016


Changer le nom dun objet/hotspot Empty
MessageSujet: Re: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot EmptySam 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
Contenu sponsorisé





Changer le nom dun objet/hotspot Empty
MessageSujet: Re: Changer le nom dun objet/hotspot   Changer le nom dun objet/hotspot Empty

Revenir en haut Aller en bas
 
Changer le nom dun objet/hotspot
Revenir en haut 
Page 1 sur 1

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: