Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Cartes Pokémon 151 : où trouver le coffret Collection Alakazam-ex ?
Voir le deal

 

 Fonction "Say" & Fond item dans Inventaire

Aller en bas 
+2
Shai-la
mikosworld
6 participants
Aller à la page : Précédent  1, 2, 3  Suivant
AuteurMessage
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue



Nombre de messages : 130

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyJeu 30 Oct 2008 - 13:05

Kitai a écrit:
Sinon aussi l'idéal est de placer cette fonction dans le header du global script, histoire de pouvoir accéder à la fonction depuis n'importe quel script (notamment dans les scripts de room).
Bon ça marche, si je mets ce script dans le header ... c'est bizarre ça!?
Pour revenir au script, c'est pas possible d'utiliser ou de modifier la fonction "Say" pour l'afficher mon label? car ça m'embête un peu de ne pas avoir la couleur du speech et le perso qui parle... tu me diras j'ai cas déclencher une animation de mon perso et changer la couleur du texte. Mais disons que la fonction Say est vraiment adaptée clin d'oeil

P.s.: Quelqu'un sait la résolution exacte du jeu : Runaway 1&2 ?

EDT: Bon en fait j'ai réussi à faire ça :
Code:

function Dire(this Character*, String message)
{
label1.Visible = false;
player.FaceObject([0]);
player.SayAt(label1.x, label.1.y, label1.width, message);
label1.Visible = true;
}

ça me permet donc d'afficher son speech dans mon label GUI, avec l'orientation de mon personnage qui regarde l'objet avant de parler sourire
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue



Nombre de messages : 130

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMar 4 Nov 2008 - 20:56

Bon maintenant, je suis un autre petit problème voilà, j'ai établie un hotspot sur mon décor nommé "hCloset"

Quand je clique du bouton droit, j'ai la possibilité de faire un MouseNextMode sauf que j'ai fait ceci :
Code:

function hCloset_MouseMove();

// Désactive les curseurs "Parler" et "Marcher"
mouse.DisableMode(eModeTalkto);
mouse.DisableMode(eModeWalkto);

// Change le curseur actuel par celui de "Regarder"
mouse.Mode = eModeLookat;

// Quand je fais un clic droit je change le texte dans mon label GUI
if (mouse.Mode == eModeLookat){
label1.Text = "EXAMINER @OVERHOTSPOT@";}
else if (mouse.Mode == eModeInteract) {
label1.Text = "OUVRIR @OVERHOTSPOT@";}
}

Alors mes pointeurs changent bien comme je veux, mais le texte reste fixé à "REGARDER PLACARD" triste et pas "OUVRIR PLACARD" quand je clique du bouton droit quand mon curseur Interact est actif triste
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
Asraroth
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Asraroth


Nombre de messages : 1450

Age : 49

Date d'inscription : 20/10/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMar 4 Nov 2008 - 21:18

mikosworld a écrit:

Code:

mouse.Mode = eModeLookat;
if (mouse.Mode == eModeLookat){
label1.Text = "EXAMINER @OVERHOTSPOT@";}

C'est normal... tu mets le mode "LookAt" et ensuite, tu testes si c'est le mode "LookAt" pour mettre "EXAMINER" dans ton label...
Revenir en haut Aller en bas
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 5 Nov 2008 - 0:19

Asraroth a écrit:
C'est normal... tu mets le mode "LookAt" et ensuite, tu testes si c'est le mode "LookAt" pour mettre "EXAMINER" dans ton label...
Euh, oui mais c'est je disais que quand je passe à l'autre curseur, c-a-d "eModeInteract", le texte reste sur "EXAMINER @OVERHOTSPOT@" et non "OUVRIR @OVERHOTSPOT@" triste

EDT : La version finale 3.1 de AGS est sortie sourire
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
jpcr
Cliqueur Amateur
Cliqueur Amateur
jpcr


Nombre de messages : 230

Age : 57

Localisation : Region Parisienne

Date d'inscription : 01/10/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 5 Nov 2008 - 15:54

hein , ou ça ? tu l'as trouvée ou la 3.1 ? sur le site je ne vois que 3.02.
Revenir en haut Aller en bas
https://jpcr.itch.io/
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 5 Nov 2008 - 15:59

jpcr a écrit:
hein , ou ça ? tu l'as trouvée ou la 3.1 ? sur le site je ne vois que 3.02.
Sur le forum sourire
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
jpcr
Cliqueur Amateur
Cliqueur Amateur
jpcr


Nombre de messages : 230

Age : 57

Localisation : Region Parisienne

Date d'inscription : 01/10/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 5 Nov 2008 - 16:20

super , merci beaucoup Nico!
jaime vraiement bien la nouvelle interface et comme j'aimais pas la precedente, je suis bien content.

jp
Revenir en haut Aller en bas
https://jpcr.itch.io/
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 5 Nov 2008 - 21:19

mikosworld a écrit:
Euh, oui mais c'est je disais que quand je passe à l'autre curseur, c-a-d "eModeInteract", le texte reste sur "EXAMINER @OVERHOTSPOT@" et non "OUVRIR @OVERHOTSPOT@" triste
La fonction (MouseMove()) dans laquelle tu as placé ton code est appelée en boucle lorsque ta souris se trouve sur le hotspot.
Tout le code qui est contenu dedans est réexécuté en permanence, dans le même ordre. Asraroth te fait remarquer
Asraroth a écrit:
C'est normal... tu mets le mode "LookAt" et ensuite, tu testes si c'est le mode "LookAt" pour mettre "EXAMINER" dans ton label...
et il a raison : le mode de la souris sera toujours "LookAt" lorsque le moteur arrivera à la ligne if (mouse.Mode == eModeLookat){. Ainsi, même si tu cliques droit pour changer le mode de la souris, la commande mouse.Mode = eModeLookat; placée plus haut remettra systématiquement et fatalement la souris dans ce mode.

Une solution est de placer plutôt la commande mouse.Mode = eModeLookat; dans la fonction MouseGetsOn que je t'ai proposée dans ce topic et de laisser tes "if" dans la fonction MouseMove(). (Si j'ai bien compris ce que tu veux faire, c'est-à-dire passer la souris en mode "Regarder" lorsqu'on arrive sur le hotspot, mais seulement lorsqu'on arrive, pas en boucle)

Sinon, tu as posté cette ligne pour ton code :
Code:
function hCloset_MouseMove();
à mon avis tu devrais avoir
Code:
function hCloset_MouseMove() {
(ouverture d'accolade pour marquer le début de la définition de la fonction).

Voilà, bon courage ^^
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyVen 7 Nov 2008 - 13:16

Alors merci, mais en fait, c'est juste que j'aimerais afficher quand je suis sur certains Hotspots des textes d'actions appropriés.

1. Ta fonction marche que si, je veux "généraliser" ça pour tous mes hotspots de la room, alors que ce n'est pas le cas...

Car je dois afficher "REGARDER @OVERHOTSPOT@" (quand je suis en mode LookAt) sur mon hotspot "Fenêtre", afficher "EXAMINER @OVERHOTSPOT@" (quand je suis en mode LookAt) ou "PRENDRE @OVERHOTSPOT@" (quand je suis en mode Interact) sur mon hotspot "Placard", etc ...
Tu vois ?

2. j'ai voulu comme un grand garçon, créer une autre fonction afin de me simplifier la vie, mais il se trouve qu'il y aurait une erreur:
Code:

function PrendreObjet(this Character*, Object, InventoryItem *item, String message)
{
// Cache le texte de mon GUI par défaut
label1.Visible = false;

// Le perso regarde l'objet, puis y va
player.FaceObject(object[0]);
player.Walk(object[0].X, object[0].Y, eBlock, eWalkableAreas);

// Affiche le GUI de mon inventaire et fais une pause
gInventory.Visible = true;
Wait(35);

// Ajoute mon item dans mon inventaire accompagné d'un son, puis pause
player.AddInventory(inventory[0]);
PlaySound(additem);
Wait(35);

// Mon perso commente (en reprenant ma précédente fonction Dire)
player.Dire(message);

// Montre le texte de mon GUI par défaut
label1.Visible = false;

// Cache le GUI de mon inventaire et l'objet de ma room
gInventoy.Visible = false;
object[0].Visible = false;
}

AGS m'affiche cette erreur : "undefined symbol 'message'" (en gros, il incrimine ma chaîne 'message'), j'ai pas bien compris, vu que ça marche pour la function Dire()
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyVen 7 Nov 2008 - 17:22

mikosworld a écrit:
1. Ta fonction marche que si, je veux "généraliser" ça pour tous mes hotspots de la room, alors que ce n'est pas le cas...

Car je dois afficher "REGARDER @OVERHOTSPOT@" (quand je suis en mode LookAt) sur mon hotspot "Fenêtre", afficher "EXAMINER @OVERHOTSPOT@" (quand je suis en mode LookAt) ou "PRENDRE @OVERHOTSPOT@" (quand je suis en mode Interact) sur mon hotspot "Placard", etc ...
Tu vois ?
Je pense que je vois oui...
Tu peux essayer d'utiliser les Propriétés que propose AGS pour certains éléments comme les personnages, objets, hotspots, etc.
Il y a un sujet sur ce forum qui en parle un peu...
Grosso modo faudra faire un truc du type
Code:
Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);
label1.Text = objet.GetTextProperty("Action");
Si tu rencontres des difficultés à recourir à cette solution, hésite pas à demander des précisions.

mikosworld a écrit:
2. j'ai voulu comme un grand garçon, créer une autre fonction afin de me simplifier la vie, mais il se trouve qu'il y aurait une erreur:
Code:

function PrendreObjet(this Character*, Object, InventoryItem *item, String message)
{
// Cache le texte de mon GUI par défaut
label1.Visible = false;

// Le perso regarde l'objet, puis y va
player.FaceObject(object[0]);
player.Walk(object[0].X, object[0].Y, eBlock, eWalkableAreas);

// Affiche le GUI de mon inventaire et fais une pause
gInventory.Visible = true;
Wait(35);

// Ajoute mon item dans mon inventaire accompagné d'un son, puis pause
player.AddInventory(inventory[0]);
PlaySound(additem);
Wait(35);

// Mon perso commente (en reprenant ma précédente fonction Dire)
player.Dire(message);

// Montre le texte de mon GUI par défaut
label1.Visible = false;

// Cache le GUI de mon inventaire et l'objet de ma room
gInventoy.Visible = false;
object[0].Visible = false;
}

AGS m'affiche cette erreur : "undefined symbol 'message'" (en gros, il incrimine ma chaîne 'message'), j'ai pas bien compris, vu que ça marche pour la function Dire()
Ton code présente plusieurs problèmes, mais "message" ne semble pas en être un... étrange.

Premièrement, tu as mis comme deuxième argument de ta fonction Object sans spécifier par quelle variable tu y feras référence dans le coeur de la fonction (en gros tu as spécifié le type du deuxième argument, mais pas son nom). Je te conseille donc de faire simplement Object *objet comme tu fais avec InventoryItem *item.
Ensuite l'intérêt de ces arguments est de généraliser à tout élément que tu passes dans la fonction, et ainsi tu n'as pas à utiliser object[0] ni inventory[0]. Tu utiliseras plutôt les variables objet et item qui sont passées en arguments de la fonction.
Tu obtiendras alors un code du style :
Code:
function PrendreObjet(this Character*, Object objet, InventoryItem *item, String message)
{
// Cache le texte de mon GUI par défaut
label1.Visible = false;

// Le perso regarde l'objet, puis y va
player.FaceObject(objet);
player.Walk(objet.X, objet.Y, eBlock, eWalkableAreas);

// Affiche le GUI de mon inventaire et fais une pause
gInventory.Visible = true;
Wait(35);

// Ajoute mon item dans mon inventaire accompagné d'un son, puis pause
player.AddInventory(item);
PlaySound(additem);
Wait(35);

// Mon perso commente (en reprenant ma précédente fonction Dire)
player.Dire(message);

// Montre le texte de mon GUI par défaut
label1.Visible = true;

// Cache le GUI de mon inventaire et l'objet de ma room
gInventoy.Visible = false;
objet.Visible = false;
}
Une petite remarque sur ce code : je suppose que tu as défini une variable globale entière (type int) additem pour pouvoir l'utiliser dans PlaySound().

Au final cette fonction s'appelle comme ça : player.PrendreObjet(object[0], inventory[0], "Je prends l'objet.");

Je pense avoir à peu près répondu à ton message, en attente d'une réponse, bon courage clin d'oeil
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyLun 10 Nov 2008 - 13:36

Alors merci et encore merci pour tes réponses sourire
Alors dans l'ordre ...

1. Pour ceci, je dois le mettre où ce genre de code ? en global ou dans une fonction Mouse_Move() ?
Code:

Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);
label1.Text = objet.GetTextProperty("Action");

2. Pour l'autre code pour ma fonction Prendre(), bon effectivement si je mets pas de variable à côté de "Object" ça ne marchera pas sourire

Par contre, problème :
1. il m'affichait un sprite zarbi dans mon inventaire alors que ça devrait être mon sac (iBag)
et 2. mon objet n'est pas caché triste pourtant dans ma fonction "Object[0].Visible = false;"

Code:

player.Prendre(oBag, iBag, "Il a l'air lourd ce sac !")

Je ne pige pas bien l'erreur, bon finalement ça marche la variable 'message', sûrement que j'ai dû oublié les guillemets ... triste
pas bien l'habitude du script moi sourire

3. et enfin pour ta remarque PlaySound(additem), en fait, j'utilise un plugin, qui me permet de donner un véritable nom à mes samples (music, speech, sound) comme une sorte d'alias et une description courte... 'additem' est un nom de script qui me jouera le son 2 par exemple ...
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyLun 10 Nov 2008 - 21:09

1.
mikosworld a écrit:
Pour ceci, je dois le mettre où ce genre de code ? en global ou dans une fonction Mouse_Move() ?
Code:

Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);
label1.Text = objet.GetTextProperty("Action");
Je vois que j'ai mis "Object", mais tu sembles plutôt utiliser des Hotspots.
Du coup ça donnerait un code plutôt comme ça :
Code:
Hotspot* spot = Hotspot.GetAtScreenXY(mouse.x, mouse.y);
label1.Text = spot.GetTextProperty("Action");
Ça serait à placer dans la fonction Mouse_Move() puisque c'est ce qui change le texte de ton GUI lorsque tu arrives sur le hotspot.
Bien sûr il faut au préalable avoir créé une propriété personnalisée.

2.
mikosworld a écrit:
Pour l'autre code pour ma fonction Prendre(), bon effectivement si je mets pas de variable à côté de "Object" ça ne marchera pas sourire

Par contre, problème :
1. il m'affichait un sprite zarbi dans mon inventaire alors que ça devrait être mon sac (iBag)
et 2. mon objet n'est pas caché triste pourtant dans ma fonction "Object[0].Visible = false;"

Code:

player.Prendre(oBag, iBag, "Il a l'air lourd ce sac !")
As-tu bien remplacé "object[0]" et "iventory[0]" par "objet" et "item" (comme je l'ai proposé :
Kitai a écrit:
Ensuite l'intérêt de ces arguments est de généraliser à tout élément que tu passes dans la fonction, et ainsi tu n'as pas à utiliser object[0] ni inventory[0]. Tu utiliseras plutôt les variables objet et item qui sont passées en arguments de la fonction.
) dans le corps de la fonction ?


3.
mikosworld a écrit:
et enfin pour ta remarque PlaySound(additem), en fait, j'utilise un plugin, qui me permet de donner un véritable nom à mes samples (music, speech, sound) comme une sorte d'alias et une description courte... 'additem' est un nom de script qui me jouera le son 2 par exemple ...
Okidoki, parfait alors :^^:
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMar 11 Nov 2008 - 21:06

Alors parfait pour mon problème N°2, ça marche impecc maintenant sourire

Kitai a écrit:
Je vois que j'ai mis "Object", mais tu sembles plutôt utiliser des Hotspots.
J'utilise les deux, quand c'est un objet qu'on peut pas prendre c'est un Hotspot (car il est fusionné dans la background), sinon j'utilise des objets pour les collectables ...

Par contre pour le N°1, bein c'est pas ça triste
Il m'affiche mon texte que j'ai mis dans ma propriété perso. triste
J'explique ce que j'ai fais :
a. Dans ma room, j'ai créé une nouvelle propriété perso...
b. Propriété "Action", Description (test), Mode Texte et "EXAMINER PLACARD"
c. Dans ma fonction "hCloset_MouseMove()", je place ton code
d. en test, il m'affiche en permanence "EXAMINER PLACARD", quand je bascule d'action avec le clic droit, le texte reste sur "EXAMINER PLACARD" au lieu de "OUVRIR PLACARD" quand je suis sur le curseur "Interact" triste

Voilu clin d'oeil
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 12 Nov 2008 - 0:13

mikosworld a écrit:
J'utilise les deux, quand c'est un objet qu'on peut pas prendre c'est un Hotspot (car il est fusionné dans la background), sinon j'utilise des objets pour les collectables ...
Du coup ça demande un code un peu plus conséquent que gérer uniquement des Hotspots puisqu'il n'y a pas de fonction Mouse_Move pour les objets.

mikosworld a écrit:
en test, il m'affiche en permanence "EXAMINER PLACARD", quand je bascule d'action avec le clic droit, le texte reste sur "EXAMINER PLACARD" au lieu de "OUVRIR PLACARD" quand je suis sur le curseur "Interact" triste
Ok j'avais donc toujours pas compris ton problème, j'dois pas être très réceptif ^^'
Si le texte doit changer selon le mode de la souris (ce qui paraît plutôt logique finalement...), tu peux créer deux propriétés personnalisées : une interaction et une regarder, et dans la fonction qui modifie le texte du GUI, tu placeras un ingénieux if qui associera mouse.mode à la propriété désirée ("interaction" ou "regarder").

Je répète que passer par les propriétés personnalisées est utile vu que tu désires un texte différent lorsque tu survoles différents objets, dans le même mode (par exemple pour un crayon "Prendre crayon" en interaction, pour une fenêtre "Ouvrir fenêtre" toujours en interaction).

Ensuite si tu veux gérer à la fois les hotspots et les objets, on retourne à la fonction MouseGetsOn que je t'ai proposée il y a un moment :clindoeil:
La généralisation ne sera pas gênante puisque tu "particulariseras" en affectant une valeur différente de propriétés personnalisées "interaction" et "regarder" pour chaque objet et hotspot que tu créeras.
Quelque chose comme :
Code:
function MouseGetsOn(LocationType over) {
 
  IsMouseOver = over;
 
  String texte; // On crée une variable string qui contiendra le texte à placer dans le GUI.

  if (over == eLocationObject) {

    // On récupère la propriété de l'objet survolé selon le mode de la souris.
    Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);

    if (mouse.mode == eModeInteract) texte = objet.GetTextProperty("Interaction");
    else if (mouse.mode == eModeLookat) texte = objet.GetTextProperty("Regarder");

  }

  if (over == eLocationHotspot) {

    // On fait de même que plus haut, mais avec le hotspot survolé.
    Hotspot* zone = Hotspot.GetAtScreenXY(mouse.x, mouse.y);

    if (mouse.mode == eModeInteract) texte = zone.GetTextProperty("Interaction");
    else if (mouse.mode == eModeLookat) texte = zone.GetTextProperty("Regarder");

  }

  // On affiche le texte retourné par GetTextProperty.
  label1.Text = texte;

}

Voilà, on devrait toucher au but ! Fonction "Say" & Fond item dans Inventaire - Page 2 114419
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 12 Nov 2008 - 13:18

Alors je pige encore un peu mieux le principe grâce à toi ...
Mais, car il y a un mais sourire
Dès que je survole un objet ou un hotspot, AGS s'arrête et m'affiche : "Error running 'repeatly_execute : Error Null pointer referenced'" triste
Il surligne en jaune
Code:
else if (mouse.mode == eModeLookat) texte = objet.GetTextProperty("Regarder");

Je ne pige pas triste

Dans ton code, tu y affiche une variable "Texte", je suppose qu'il faille la créer avant comme "String texte;"

A noter également, que j'ai adapté ton code, car comme j'avais déjà la fonction MouseGetsOn (voir dans les anciens posts...)

Donc voilà ...
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyMer 12 Nov 2008 - 20:36

Hmm, tu as bien mis le code que je t'ai filé dans la fonction MouseGetsOn (même si elle existe déjà) ?

Si tu as mis ces if dans repeatedly_execute, effectivement, ça va causer des problèmes.

Au pire reporte moi ta fonction MouseGetsOn que je voie s'il y a un problème dedans.

Il faut en effet déclarer la variable "texte" en dehors des if car sinon il y a risque de la déclarer plusieurs fois, ce qui est conflictuel pour le script AGS (et beaucoup d'autres langages de programmation en général).

Sinon il faudrait rajouter une ligne "if (objet == null) return;" après "Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);" et une ligne "if (zone == null) return;" après "Hotspot* zone = Hotspot.GetAtScreenXY(mouse.x, mouse.y);", ça devrait suffir à éviter ces messages qu'AGS affiche sans cesse.
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyJeu 13 Nov 2008 - 0:32

Kitai a écrit:
Hmm, tu as bien mis le code que je t'ai filé dans la fonction MouseGetsOn (même si elle existe déjà) ?

Kitai a écrit:

Si tu as mis ces if dans repeatedly_execute, effectivement, ça va causer des problèmes.
Haha, euh du coup je ne sais plus, voici le code :
Code:

function repeatedly_execute() {
 
  // put anything you want to happen every game cycle, even when
  // the game is paused, here
 
  if (IsGamePaused() == 1) return;
 
  if (IsMouseOver) {
    if ((Hotspot.GetAtScreenXY(mouse.x, mouse.y) == hotspot[0]) && (InventoryItem.GetAtScreenXY(mouse.x, mouse.y) == null) && (Object.GetAtScreenXY(mouse.x, mouse.y) == null) && (Character.GetAtScreenXY(mouse.x, mouse.y) == null) && (GUI.GetAtScreenXY(mouse.x, mouse.y) == null)) MouseGetsOff();
  }

  else {
    if (Object.GetAtScreenXY(mouse.x, mouse.y)) MouseGetsOn(eMouseOverObject);
    if (Character.GetAtScreenXY(mouse.x, mouse.y)) MouseGetsOn(eMouseOverCharacter);
    if (Hotspot.GetAtScreenXY(mouse.x, mouse.y) != hotspot[0]) MouseGetsOn(eMouseOverHotspot);
    if (GUI.GetAtScreenXY(mouse.x, mouse.y)) MouseGetsOn(eMouseOverGUI);
  }
}

Kitai a écrit:

Au pire reporte moi ta fonction MouseGetsOn que je voie s'il y a un problème dedans...
Houla, ça se complique du coup car y a trop d'éléments, d'ailleurs 'zone' n'existe pas!?
voici le code :
Code:

// en haut du GlobalScript
  enum MouseOver {
  eMouseOverObject,
  eMouseOverCharacter,
  eMouseOverHotspot,
  eMouseOverGUI
};
bool IsMouseOver = false;

function MouseGetsOn(MouseOver over) {
  // Cette fonction va se déclencher (une seule fois) dès
  // que le curseur arrive sur un objet, un personnage,
  // un hotspot ou un GUI.
  PlaySound(1);
  mouse.Mode = eModeLookat;
  IsMouseOver = true;
 
  String texte;
  Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);
  if(objet == null) return;
  if(mouse.Mode == eModeInteract) texte = objet.GetTextProperty("Interaction");
  else(mouse.Mode ==  eModeLookat) texte = objet.GetTextProperty("Regarder");
 
  if (over == eLocationHotspot) {
  Hotspot* item = Hotspot.GetAtScreenXY(mouse.x, mouse.y);
  if(zone == null) return;
  if(mouse.Mode == eModeInteract) texte = hotspot[0].GetTextProperty("Interaction");
  else if(mouse.Mode == eModeLookat) texte = hotspot[0].GetTextProperty("Regarder");
  }

  label1.Text = texte;
 
  if (over == eMouseOverObject) {
    // Ici les actions à exécuter quand le curseur survole
    // un objet. L'objet est retourné par la fonction
    // Object.GetAtScreenXY(mouse.x, mouse.y)
  }

  if (over == eMouseOverCharacter) {
    // Comme pour eMouseOverObject, mais cette fois
    // pour les personnages.
  }

  if (over == eMouseOverHotspot) {
 
  }

  if (over == eMouseOverGUI) {
 
  }

  // Ici les commandes que vous voulez exécuter
  // quel que soit l'élément survolé.
 

}


function MouseGetsOff() {
  // Cette fonction va se déclencher (une seule fois) dès
  // que le curseur quitte un objet, un personnage,
  // un hotspot ou un GUI.
 
  mouse.EnableMode(eModeLookat);
  mouse.EnableMode(eModeInteract);
  mouse.EnableMode(eModeWalkto);
  label1.Text = "ALLER VERS";
 
  mouse.Mode = eModeWalkto;
 
  IsMouseOver = false;

  // Placez ici les fonctions que vous voulez voir exécutées
  // une seule fois dès que la souris ne survole plus rien.
  PlaySound(1);
}

Voilà, c'est une vraie jungle sourire et merci de ton temps que tu passes avec moi et AGS sourire
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyVen 14 Nov 2008 - 16:13

Ok, bon, alors y'a pas mal de trucs à retoucher ^^'

Je vais te copier le code qui devrait marcher avec ce que tu as pour le moment, parce que là y'a plein de conflits qui risquent de survenir.
Code:
// en haut du GlobalScript
bool IsMouseOver = false;

function ChangeLabel (LocationType type) {
  // Lorsqu'on appelle cette fonction, le texte du GUI
  // change pour la propriété associée à l'élément survolé,
  // dans le type d'interaction correspondant au curseur de la souris.

  String texte = "";

  if (type == eLocationObject) {

    // On récupère l'objet aux coordonnées de la souris.
    Object* objet = Object.GetAtScreenXY(mouse.x, mouse.y);

    if (objet == null) return;

    // Puis on stocke dans la variable texte le texte d'action associé
    // au type d'interaction correspondant au curseur de la souris,
    // pour l'objet pointé.
    if (mouse.Mode == eModeInteract) texte = objet.GetTextProperty("Interaction");
    else (mouse.Mode ==  eModeLookat) texte = objet.GetTextProperty("Regarder");

  }
 
  if (type == eLocationHotspot) {
    // On va faire la même chose avec le Hotspot pointé qu'on
    // fait avec l'objet pointé

    Hotspot* item = Hotspot.GetAtScreenXY(mouse.x, mouse.y);

    if (item == null) return;

    if (mouse.Mode == eModeInteract) texte = item.GetTextProperty("Interaction");
    else if (mouse.Mode == eModeLookat) texte = item.GetTextProperty("Regarder");

  }

  // texte contient le texte d'interaction de l'élément survolé,
  // on l'affiche donc dans label1.
  label1.Text = texte;

}


function MouseGetsOn(LocationType over) {
  // Cette fonction va se déclencher (une seule fois) dès
  // que le curseur arrive sur un objet, un personnage,
  // un hotspot ou un GUI.

  PlaySound(1);
  mouse.Mode = eModeLookat;
  IsMouseOver = true;

  ChangeLabel(GetLocationType(mouse.x, mouse.y)); 

  // Ici les commandes que vous voulez exécuter
  // quel que soit l'élément survolé.
 

}


function MouseGetsOff() {
  // Cette fonction va se déclencher (une seule fois) dès
  // que le curseur quitte un objet, un personnage,
  // un hotspot ou un GUI.
 
  mouse.EnableMode(eModeLookat);
  mouse.EnableMode(eModeInteract);
  mouse.EnableMode(eModeWalkto);
  label1.Text = "ALLER VERS";
 
  mouse.Mode = eModeWalkto;
 
  IsMouseOver = false;

  // Placez ici les fonctions que vous voulez voir exécutées
  // une seule fois dès que la souris ne survole plus rien.
  PlaySound(1);

}
Code:
function repeatedly_execute() {
 
  // put anything you want to happen every game cycle, even when
  // the game is paused, here
 
  if (IsGamePaused() == 1) return;
 
  if (IsMouseOver) {

    // Si la souris vient de quitter un élément, on appelle MouseGetsOff.
    if (GetLocationType(mouse.x,mouse.y) == eLocationNothing) MouseGetsOff();
    // Sinon, on appelle ChangeLabel, comme ça, si le joueur clique droit
    // et change le mode du curseur, le texte sera adapté.
    else ChangeLabel(GetLocationType(mouse.x, mouse.y));

  }

  else {

    // Si la souris arrive sur un élément, on appelle MouseGetsOn.
    LocationType type = GetLocationType(mouse.x,mouse.y);
    if (type != eLocationNothing) MouseGetsOn(type);

  }

}
Voilà, stun peu long :^^:
J'ai changé quelques petits trucs auxquels j'avais pas forcément pensé...
Je sais pas si ça sera bon comme ça, notamment ce que tu as placé dans MouseGetsOff donc je comprends pas bien la pertinence.

Mais toi j'imagine que tu sais pourquoi tu fais ça :clindoeil:


Dernière édition par Kitai le Sam 15 Nov 2008 - 0:52, édité 2 fois
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 0:45

Code:
if(zone == null) return;

Y a un soucis avec ça ! triste
'zone' est étranger pour AGS triste

Code:

mouse.EnableMode(eModeLookat);
  mouse.EnableMode(eModeInteract);
  mouse.EnableMode(eModeWalkto);
  label1.Text = "ALLER VERS";
ça c'est pour rétablir les curseurs quand on est en dehors d'un objet ou hotspot, car je désactive certains, comme Parler, car il est rare qu'on parle à un placard ou un sac à main ... clin d'oeil
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 0:54

Au temps pour moi, j'avais pas été tout à fait attentif quand j'ai posté le message.

J'ai modifié en conséquence, il devrait plus y avoir ce problème.

Citation :
ça c'est pour rétablir les curseurs quand on est en dehors d'un objet ou hotspot, car je désactive certains, comme Parler, car il est rare qu'on parle à un placard ou un sac à main ...
Ok, c'est ce que je me disais, mais ce que je trouve bizarre c'est que les modes que tu réactives sont ceux qui sont déjà censés être actifs pour le survol des objets et hotspots (c'est-à-dire "marcher vers", "regarder" et "interagir"...)
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 12:59

La compilation se fait maintenant sourire
Mais quand je survoles mes objets et hotspots, j'ai pas de texte triste
Pourtant quand je suis en dehors, "ALLER VERS" réapparait correment
Bizzare! sourire
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 13:19

Tu as bien créé deux propriétés personnalisées de type textuel : Regarder et Interaction ?

Ce sont ces propriétés qui doivent définir le texte qui sera affiché quand tu survoleras un objet ou un hotspot.
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 16:57

Kitai a écrit:
Tu as bien créé deux propriétés personnalisées de type textuel : Regarder et Interaction ?

Ce sont ces propriétés qui doivent définir le texte qui sera affiché quand tu survoleras un objet ou un hotspot.

Absolument ! :pleure:
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 18:33

Ok alors chez moi ça marche bien, à une exception près : j'ai la commande ChangeCurseur dans "Player Enters Room Before Fade-In", qui donc contient la commande SaveCursorUntilItLeaves.
Cette dernière commande sauve le mode de la souris (Walkto dans mon cas) lorsqu'elle est appelée, et le restaure lorsque la zone survolée est quittée.
Dans mon cas, la zone survolée est vide, et le mode est donc restauré lorsqu'on survole quoi que ce soit.
Du coup, lorsque je survole un objet, le mode passe en "Marcher vers", mode auquel aucun texte n'est associé.

Il faut se méfier de la commande SaveCursorUntilItLeaves, elle peut avoir des effets pervers.

Sinon ça marche correctement, notamment en passant les modes avec un clic droit, ça marche bien.
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 21:16

ah bein là, je ne pige pas triste
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
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


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptySam 15 Nov 2008 - 22:06

Quoi donc ?

Au pire compresse le dossier du jeu et envoie-le moi (le dossier du projet, pas du jeu compilé) en me précisant sous quelle version de AGS tu tournes.
Revenir en haut Aller en bas
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
mikosworld
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar


Nombre de messages : 130

Age : 43

Localisation : Ain - France

Date d'inscription : 18/06/2006


Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 EmptyDim 16 Nov 2008 - 1:23

ok mais comme j'aimerais comprendre sourire

Est-ce que tu appelles une fonction dans la room ? autre quand dans le GlobalScript ?
Revenir en haut Aller en bas
http://www.nouvelle-cible.com
Contenu sponsorisé





Fonction "Say" & Fond item dans Inventaire - Page 2 Empty
MessageSujet: Re: Fonction "Say" & Fond item dans Inventaire   Fonction "Say" & Fond item dans Inventaire - Page 2 Empty

Revenir en haut Aller en bas
 
Fonction "Say" & Fond item dans Inventaire
Revenir en haut 
Page 2 sur 3Aller à la page : Précédent  1, 2, 3  Suivant
 Sujets similaires
-
» Action dans l'inventaire
» Animations lancées dans le fond pendant le jeu
» Interactions d'objets dans l'inventaire
» faire défiler les objets dans l'inventaire
» Plusieurs objets dans l'inventaire bien rangé?

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: