|
| Fonction "Say" & Fond item dans Inventaire | |
| | |
Auteur | Message |
---|
mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Jeu 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 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 |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mar 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" et pas "OUVRIR PLACARD" quand je clique du bouton droit quand mon curseur Interact est actif |
| | | Asraroth Disciple de la Grande Tasse Bleue
Nombre de messages : 1468
Age : 49
Date d'inscription : 20/10/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mar 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... |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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@" EDT : La version finale 3.1 de AGS est sortie |
| | | jpcr Cliqueur Amateur
Nombre de messages : 230
Age : 57
Localisation : Region Parisienne
Date d'inscription : 01/10/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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. |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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 |
| | | jpcr Cliqueur Amateur
Nombre de messages : 230
Age : 57
Localisation : Region Parisienne
Date d'inscription : 01/10/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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 |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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@"
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 _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Ven 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() |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Ven 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 _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Lun 10 Nov 2008 - 13:36 | |
| Alors merci et encore merci pour tes réponses 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 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é 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 ... pas bien l'habitude du script moi 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 ... |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Lun 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
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é 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 : : _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mar 11 Nov 2008 - 21:06 | |
| Alors parfait pour mon problème N°2, ça marche impecc maintenant - 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 Il m'affiche mon texte que j'ai mis dans ma propriété perso. 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" Voilu |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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"
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 ! _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 12 Nov 2008 - 13:18 | |
| Alors je pige encore un peu mieux le principe grâce à toi ... Mais, car il y a un mais 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'" Il surligne en jaune - Code:
-
else if (mouse.mode == eModeLookat) texte = objet.GetTextProperty("Regarder"); Je ne pige pas 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à ... |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Mer 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. _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Jeu 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 et merci de ton temps que tu passes avec moi et AGS |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Ven 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: _________________ 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 !
Dernière édition par Kitai le Sam 15 Nov 2008 - 0:52, édité 2 fois |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 15 Nov 2008 - 0:45 | |
| - Code:
-
if(zone == null) return; Y a un soucis avec ça ! 'zone' est étranger pour AGS - 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 ... |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 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"...) _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 15 Nov 2008 - 12:59 | |
| La compilation se fait maintenant Mais quand je survoles mes objets et hotspots, j'ai pas de texte Pourtant quand je suis en dehors, "ALLER VERS" réapparait correment Bizzare! |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 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. _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 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: |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 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. _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 15 Nov 2008 - 21:16 | |
| ah bein là, je ne pige pas |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Sam 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. _________________ 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 ! |
| | | mikosworld Adepte de la Grande Tasse Bleue
Nombre de messages : 130
Age : 44
Localisation : Ain - France
Date d'inscription : 18/06/2006
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire Dim 16 Nov 2008 - 1:23 | |
| ok mais comme j'aimerais comprendre Est-ce que tu appelles une fonction dans la room ? autre quand dans le GlobalScript ? |
| | | Contenu sponsorisé
| Sujet: Re: Fonction "Say" & Fond item dans Inventaire | |
| |
| | | | Fonction "Say" & Fond item dans Inventaire | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |