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

Partagez | 
 

 [Résolu] Changer de curseur selon ce qu'il survole

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: [Résolu] Changer de curseur selon ce qu'il survole   Mar 2 Aoû 2011 - 12:56

Bon désolé de poster encore mais je risque de ne pas y arriver tout seul.

Comme je l'ai déjà dit, je voudrais me baser sur le principe des Baphomet et Runaway. Ca paraît un peu prétentieux, il n'en est rien. Tout ce que je veux dire par là, c'est que je voudrais avoir le même gameplay :

Clic gauche : Aller vers, utiliser, parler à, prendre...
Clic droit : Observer

J'aimerais également que, comme dans ces jeux, le curseur change quand on passe sur une zone interactive (un curseur différent en fonction de l'action possible) et que le nom de l'objet soit affiché quelque part comme dans Ninatonerre ^^

Y a-t-il un template téléchargeable qui pourrait m'aider ? Le coup des curseurs, c'est pas trop ambitieux ?


Dernière édition par valoulef le Lun 3 Sep 2012 - 13:05, édité 3 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Godzillu
Grand Cliqueur Royal
Grand Cliqueur Royal
avatar

Nombre de messages : 1536

Date d'inscription : 11/03/2007


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Mar 2 Aoû 2011 - 14:33

Sur le site anglophone j'ai cru voir un template/module qui simule le système de jeu de Baphomet. Je regarderais ce soir à le rajouter sur le forum.

_________________
Ma vie, mon oeuvre au jour semestre à la semaine le jour semestre la semaine quand j'y pense : http://godzillu.blogspot.fr/ ou FB ou Twitter ou Instagram
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://godzillu.blogspot.fr/
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Mar 2 Aoû 2011 - 14:38

Godzillu a écrit:
Sur le site anglophone j'ai cru voir un template/module qui simule le système de jeu de Baphomet. Je regarderais ce soir à le rajouter sur le forum.

Ah merci ça serait super !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Mer 3 Aoû 2011 - 15:25

Tu l'as rajouté ? Si oui, où je peux le trouver ?

_________________
"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 En ligne
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Mer 3 Aoû 2011 - 15:54

Salut
valoulef a écrit:
J'aimerais également que, comme dans ces jeux, le curseur change quand on passe sur une zone interactive (un curseur différent en fonction de l'action possible) et que le nom de l'objet soit affiché quelque part comme dans Ninatonerre ^^
En fait, même si ce genre de fonctionnalité peut aller de paire avec un template, c'est en réalité au niveau du code et non du design qu'il faut se pencher.
Et sur ce sujet, la question a déjà été posée plusieurs fois sur le forum clin d\\\\'oeil
Par exemple, ici et ici (où CrazyLegs donne un lien vers son tuto, bien sympa, sur la fonction on_mouse_click).
Plus globalement, tu devrais trouver ton bonheur dans les résultats de la recherche du mot-clé curseur sur le forum.

De façon générale, tu seras intéressé par la description de la fonction on_mouse_click et par celle de la fonction ProcessClick.

Voilà, ça reste des pistes que tu devras suivre ou non, mais je te fais confiance ^^

Hésite pas à poser d'autres questions sur le sujet, mais n'oublie pas non plus de vérifier si d'autres sur le forum n'auraient pas eu le même problème que toi et qu'on leur aurait répondu !

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 !


Dernière édition par Kitai le Mer 3 Aoû 2011 - 15:58, édité 1 fois (Raison : précisions)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Mer 3 Aoû 2011 - 16:15

Merci et désolé pour la redondance rougit

Je fais toujours des recherches avant de demander mais à vrai dire là je ne savais pas trop où chercher... Et j'ai remarqué que parfois le moteur de recherche ne donne pas de résultats pour un mot que l'on a déjà vu, même en sélectionnant "message", et en ayant vérifié l'orthographe...

Mais merci pour la réponse sourire


EDIT : Je suis vraiment un débutant total, j'ai découvert le logiciel il y a deux jours, et c'est un peu comme quand on apprend à conduire : il y a tellement de choses sur lesquelles se concentrer à la fois qu'on perd vite les pédales... Mais j'essaierai d'éviter de poser trop de questions bêtes clin d\\\\'oeil

_________________
"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 En ligne
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Mer 3 Aoû 2011 - 16:31

valoulef a écrit:
Et j'ai remarqué que parfois le moteur de recherche ne donne pas de résultats pour un mot que l'on a déjà vu, même en sélectionnant "message", et en ayant vérifié l'orthographe...
C'est vrai, le fonctionnement de ce moteur de recherche reste un mystère pour moi... Parfois quand je l'utilise c'est un peu comme si je jouais au loto !

valoulef a écrit:
EDIT : Je suis vraiment un débutant total, j'ai découvert le logiciel il y a deux jours, et c'est un peu comme quand on apprend à conduire : il y a tellement de choses sur lesquelles se concentrer à la fois qu'on perd vite les pédales... Mais j'essaierai d'éviter de poser trop de questions bêtes clin d\\\\'oeil
N'hésite surtout pas à les poser, ces questions (qu'elles soient bêtes ou non, je sais pas trop comment on détermine ça mais tout le monde parle de questions bêtes, c'est qu'il doit bien y en avoir clin d\\\\'oeil) car d'une part ça te permet d'avoir une réponse et d'autre part ça permet aux autres qui se poseraient les mêmes de les trouver plus facilement !

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Jeu 4 Aoû 2011 - 0:31

Alors je compte bien suivre ton conseil, Ktai, mais je souhaite quand même utiliser un autre template que celui proposé par défaut.

Et là j'ai un problème, qui apparemment est arrivé à d'autres personnes ici et ici, mais pour lequel je n'ai pas trouvé de réponse satisfaisante.

Je télécharge un template, et je met le fichier dans le dossier "template" d'Adventure Game Studio. Le template n'apparaît pas en faisant "Start new game"
J'ai essayé de mettre les fichiers dans le dossier principal, idem... Y'a-t-il une solution ? Les templates ne sont-ils pas compatibles avec la dernière version (pourtant certains semblent y être arrivé !) ?

_________________
"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 En ligne
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Jeu 4 Aoû 2011 - 15:42

Pour le coup, je ne suis pas du tout habitué à utiliser des templates téléchargés...
J'ai testé les templates proposés par Shai-La et aucun ne s'affiche effectivement pour un nouveau projet sous AGS 3.2.1.
En revanche le template Indiana Jones de Asraroth semble fonctionner sans soucis !

C'est donc, je pense, principalement un souci de compatibilité.
Si ton template est prévu pour une version 2.7* d'AGS, tu peux essayer de l'ouvrir avec cette version puis le scinder en GUIs, curseurs, etc. et tenter de les importer un par un dans ton projet avec AGS 3.*

Si quelqu'un a d'autres idées...

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Jeu 4 Aoû 2011 - 16:09

Et avec la version 2.72, on peut convertir un jeu édité par cette version pour qu'il fonctionne sur AGS 3 non ?

Si j'ouvre un template avec la version 2.72 et que je l'enregistre vierge, est-ce que du coup je pourrais utiliser le template directement avec AGS 3 ?

Je sais pas si je suis très clair (j'avoue ne pas encore trop avoir essayé je suis un peu partout à la fois y'a trop de trucs à apprendre !)

_________________
"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 En ligne
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Jeu 4 Aoû 2011 - 17:19

valoulef a écrit:
Et avec la version 2.72, on peut convertir un jeu édité par cette version pour qu'il fonctionne sur AGS 3 non ?

Si j'ouvre un template avec la version 2.72 et que je l'enregistre vierge, est-ce que du coup je pourrais utiliser le template directement avec AGS 3 ?
Je ne sais pas, je ne suis pas au point là-dessus. Le mieux c'est que tu testes directement et que tu voies ce que ça donne.

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Jeu 4 Aoû 2011 - 23:12

Bon n'ayant pas vraiment trouvé de template qui me convenait vraiment, j'ai décidé de me confronter au script pour commencer, afin de me rapprocher de ce que je veux en suivant tes conseils.

J'ai donc fouiné à droite à gauche et je suis parvenu (et c'est un bon début) à faire en sorte, avec le global script, que le curseur change en passant sur des personnages (talk) sur les objets (interact) et sur les hotspots (interact). Au passage c'est vraiment jouissif de passer de "je comprend rien à ce language" à "ah ok c'est comme ça que ça marche !" (merci Shai-la et les autres pour les tutos...)


Le problème c'est que que sur certains hotspots (et peut être objets), au cas par cas, je veux qu'il n'y ait que le curseur look at et pas interact.

Pour tester j'ai fait une fonction spécifique "Mouse moove over" à un hotspot, où j'ai mis mouse.Mode = eModeLookat.
Sauf que soit il y a un conflit entre cette fonction spécifique "look at" et la fonction globale "interact", soit je dois désactiver les autres curseurs (Mouse.DisableMode(eModeInteract) etc..) et après je n'arrive plus à les desactiver...

Du coup le curseur reste en mode look at en quittant l'hotspot et tout le reste est inactif.

Bon pour plus de clareté (mon explication est laborieuse) je vous mets les codes.

Dans GlobalScript :

Code:
 function repeatedly_execute(){
 
  //Si le curseur passe sur un hotspot ou un objet, il passe en mode interagir
  if((GetLocationType(mouse.x, mouse.y)==eLocationHotspot)||(GetLocationType(mouse.x, mouse.y)==eLocationObject))
  mouse.Mode = eModeInteract;
 
 if(GetLocationType(mouse.x, mouse.y)==eLocationNothing)
 mouse.Mode = eModeWalkto;
 
 if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter)
 mouse.Mode = eModeTalkto;

Dans le script de la room :

Code:
 function hHotspot1_MouseMove()
{
Mouse.DisableMode(eModeInteract);
Mouse.DisableMode(eModeTalkto);
Mouse.DisableMode(eModeWalkto);
mouse.Mode = eModeLookat;
}

En gros je lui dit de tout désactiver quand le curseur passe sur l'hotspot, mais je ne sais pas comment lui dire de les réactiver (et repasser en mode Walk To) QUAND LE CURSEUR QUITTE l'hotspot.

J'espere que je me suis à peu près fait comprendre, ce qui n'est pas gagné !

_________________
"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.


Dernière édition par valoulef le Jeu 28 Fév 2013 - 17:50, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Ven 5 Aoû 2011 - 15:01

L'idée de désactiver les autres modes de curseur est louable parce qu'elle a une certaine efficacité, mais c'est peut-être un peu trop drastique.

Dans ton cas, il existe un outil bien utile dans AGS que sont les propriétés personnalisées.

L'idée est de créer une propriété personnalisée pour les hotspots (tu peux appliquer exactement la même logique aux objets) qui ait une valeur différente selon si le hotspot en question doit être en mode Look At ou non.

Par exemple, mettons que tu as créé une propriété personnalisée nommée "LookAt" qui vaut true pour les hotspots/objets sur lesquels la souris doit se mettre en mode LookAt et false sur les autres (par défaut).
Eh bien tu auras simplement à vérifier la valeur de cette propriété pour le hotspot/objet survolé dans ta fonction repeatedly_execute, là où tu décides du mode à donner à ton curseur.

Cela donnera quelque chose comme ça :
Code:
function repeatedly_execute() {

  Hotspot* hsurvol = Hotspot.GetAtScreenXY(mouse.x, mouse.y); // Le hotspot éventuellement survolé
  Object* osurvol = Object.GetAtScreenXY(mouse.x, mouse.y); // L'objet éventuellement survolé

  // Si le curseur passe sur un hotspot...
  if (hsurvol != hotspot[0]) {

    // ... et si ce hotspot doit être en mode LookAt seulement :
    if (hsurvol.GetProperty("LookAt") == true)  mouse.Mode = eModeLookAt;
    // sinon
    else mouse.Mode = eModeInteract;

  }

  // Sinon, si le curseur passe sur un objet...
  else if (osurvol != null) {
 
    // ... et si cet objet doit être en mode LookAt seulement :
    if (osurvol.GetProperty("LookAt") == true) mouse.Mode = eModeLookAt;
    // sinon
    else mouse.Mode = eModeInteract;

  }

  else if (GetLocationType(mouse.x, mouse.y) == eLocationNothing)
    mouse.Mode = eModeWalkto;
 
  else if (GetLocationType(mouse.x, mouse.y) == eLocationCharacter)
    mouse.Mode = eModeTalkto;

}

Attention aussi, de cette façon les hotspots auront la priorité sur les objets, c'est-à-dire que si un objet et un hotspot se chevauchent à l'écran et que la souris passe dessus, c'est le hotspot qui sera détecté.
Pour donner la priorité aux objets, inverse simplement les (else)if correspondant.

_________________
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 Jeu 10 Mai 2012 - 21:56, édité 1 fois (Raison : Correction du code d'après les remarques de valoulef)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Ven 5 Aoû 2011 - 16:08

Merci beaucoup ! J'étais bloqué là dessus et quand j'ai un problème que je ne parviens pas à résoudre, je n'arrive jamais à me lancer dans autre chose en attendant.

Mon problème est réglé et maintenant que je connais l'outil "propriétés personnalisées" cela va surement beaucoup m'aider ! J'avais suspecté que cet outil pourrait m'aider mais je ne savait pas comment il marchait.

Il y avait juste une ou deux erreurs je donne la correction au cas où ça en intéresserait d'autres :

Code:
 Hotspot* hsurvol = Hotspot.GetAtScreenXY(mouse.x, mouse.y); // Le hotspot éventuellement survolé
  Object* osurvol = Object.GetAtScreenXY(mouse.x, mouse.y); // L'objet éventuellement survolé

//


Il fallait juste rajouter "XY" derrière "GetAtScreen"


Code:
 // ... et si ce hotspot doit être en mode LookAt seulement :
    if (hsurvol.GetProperty("LookAt") == true)  mouse.Mode = eModeLookat;
    // sinon
    else mouse.Mode = eModeInteract;

"eModeLookat" et non "eModeLookAt" (c'est quand même con un ordi !)


EDIT : Il y avait une autre erreur à cette ligne là :

Code:
 if (osurvol.GetProperty("LookAt") == true) mouse.Mode == eModeLookAt;

"PE04 : Parse error at 'mouse' "
Je l'ai retapé à l'identique (enfin c'est ce que je croyais), et ça a marché. En fait, je viens juste de comprendre en faisant le c/c qu'il fallait juste mettre '=' au lieu de '=='



Merci beaucoup, je progresse doucement mais sûrement. J'espère d'ici quelques semaines pouvoir vous faire part de mon projet (j'ai l'impression que le forum manque un peu de projets 'actifs', je me trompe ? sourire )

EDIT : Juste un truc que je n'ai pas compris, c'est la signification de "(hsurvol != hotspot[0])", "(osurvol != null)", et la différence entre les deux (pourquoi null pour les objets et pas pour les hotspots ?)



_________________
"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 En ligne
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Ven 5 Aoû 2011 - 19:06

Un problème en engendre souvent un autre, j'en ai réglé pas mal depuis tout à l'heure, mais maintenant quand je passe sur un objet de l'inventaire en mode interact, avec ce nouveau code, le personnage ne prend plus la clef (normalement la clef doit apparaître à coté du curseur et on doit par exemple pouvoir la montrer à un personnage ou autre, là ce n'est pas le cas, ça lâche la clé en une micro fraction de seconde)


Je ne sais pas comment régler ça pleure

EDIT : Je précise que j'ai appliqué les codes que l'on a vu précédemment quand les GUI sont visibles, ainsi que quand on survole un objet de l'inventaire

_________________
"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 En ligne
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Sam 6 Aoû 2011 - 0:37

Fiou alors j'ai pas perdu ma soirée, à force de chercher de fouiller et d'expérimenter, j'ai fini par réussir (enfin pour l'instant...).
Je me permets de vous expliquer comment j'ai résolu le problème, d'une part au cas où d'autres auraient un problème similaire (rien de pire de voir que quelqu'un d'autre à eu le même problème que soi sans savoir comment il l'a résolu), et d'autre part, parce que ça me permet de récapituler les choses dans ma tête...

Le problème était que les codes de la fonction repeatedly_execute se répètent en boucle (comme son nom l'indique). J'ai mis le code suivant pour gérer les curseurs dans les GUIs :

Code:
 
else if (isurvol != null) mouse.Mode = eModeInteract;
// si le curseur survole un objet de l'inventaire, il passe en mode Interact

else if ((gInventory.Visible == true) || (gIconbar.Visible == true) || (gPanel.Visible == true) || (gRestartYN.Visible == true) || (gSaveGame.Visible == true) || (gRestoreGame.Visible == true)) mouse.Mode = eModePointer; 
// si le curseur passe sur un de ces GUI (je n'ai pas trouvé de code qui s'appliquerait à tous les GUIs), il passe en mode pointeur

A partir de là, si je cliquais sur un objet de l'inventaire pour le séléctionner, le curseur passait en mode "UseInv" que pendant 1/40eme de seconde car il survolait toujours l'objet, et revenait donc aussitôt au mode Interact.

La solution (pour l'instant ça marche) :

Code:

if (mouse.Mode == eModeUseinv) {
 
Mouse.DisableMode(eModeInteract);
Mouse.DisableMode(eModeTalkto);
Mouse.DisableMode(eModeWalkto);

//Aussitôt que le curseur passe en mode "Use Inv", tout le reste est désactivé. De cette manière, le curseur ne peut pas repasser dans un autre mode.
}


Ensuite j'ai rajouté le code suivant dans la fonction on_mouse_click :
Code:

if (button == eMouseRight || button == eMouseWheelSouth){
   
    if (player.ActiveInventory!=null) {
player.ActiveInventory = null;
Mouse.EnableMode(eModeInteract);
Mouse.EnableMode(eModeTalkto);
Mouse.EnableMode(eModeWalkto);
    }
    else ProcessClick(mouse.x, mouse.y, eModeLookat);
  }
// Si on fait un clic droit alors qu'on a un objet d'inventaire en main, on range l'objet dans l'inventaire et on réactive tous les modes. Sinon, on simule un clic en mode Lookat comme d'habitude.

Il me reste plus qu'à faire en sorte que tous les modes soient réactivés également si on utilise l'objet (ce que j'avais oublié) mais je devrais (j'espère) m'en sortir.

Finalement, programmer un jeu d'aventure c'est comme y jouer, on est souvent bloqué, mais quand on trouve la solution, surtout par soi-même, on a encore plus envie de continuer !

Je devrais mettre ça en signature ! sourire

_________________
"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 En ligne
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Sam 6 Aoû 2011 - 15:40

valoulef a écrit:
EDIT : Juste un truc que je n'ai pas compris, c'est la signification de "(hsurvol != hotspot[0])", "(osurvol != null)", et la différence entre les deux (pourquoi null pour les objets et pas pour les hotspots ?)
Tout d'abord, rappelons que hsurvol contient le hotspot éventuellement survolé par la souris, et que osurvol contient l'objet éventuellement survolé par la souris. Mais que se passe-t-il si la souris n'en survole aucun ? Que valent ces variables ? Eh bien hsurvol vaudra hotspot[0] et osurvol vaudra null.
La différence est un peu arbitraire... Si tu regardes la définition de la fonction GetAtScreenXY pour les hotpots, tu vois le texte suivant :
Citation :
S'il n'y a aucun hotspot à cet endroit, ou si des coordonnées invalides ont été spécifiées, la variable Hotspot* représentant le hotspot 0 sera retourné.
D'un autre côté, si tu regardes la description de la même fonction pour les objets, tu vois ça :
Citation :
Retourne l'objet s'il y en a un, ou null s'il n'y en a pas.
Chris Jones (le développeur d'AGS) aurait aussi bien pu choisir de retourner null pour les hotspots ou object[0] pour les objets. Tout ce qu'il faut savoir, c'est que hotspot[0] correspond aux zones de l'écran où tu n'as placé aucun hotspot, et que Object.GetAtScreenXY retourne null s'il n'y a aucun objet à (X,Y).


Maintenant, ton nouveau problème.
Tout d'abord, réponse à cette question :
valoulef a écrit:
// si le curseur passe sur un de ces GUI (je n'ai pas trouvé de code qui s'appliquerait à tous les GUIs), il passe en mode pointeur
Déjà, littéralement parlant, ce que ton code signifie c'est "si tel GUI est visible, ou si tel autre est visible, ou si tel autre est visbile..." et non pas "si la souris survole tel GUI, ou si la souris survole tel autre, ou si elle survole tel autre...". Dans ton cas ça ne fait pas vraiment de différence il me semble, puisque ces GUIs ne sont pas visibles si la souris ne les survole pas (si je ne me trompe).
Ensuite, le code qui s'appliquerait à tous les GUIs pour le survol, ça serait encore une fois la fonction GetAtScreenXY, mais concernant les GUIs cette fois :
Code:
GUI* gsurvol = GUI.GetAtScreenXY(mouse.x, mouse.y);
if (gsurvol != null) // Si la souris survole présentement un GUI (n'importe lequel)...
Plus d'infos sur cette fonction ici.

Enfin, ta solution est comme la fois précédente : louable mais un peu drastique. Réfléchis : si j'ai bien compris ton problème, tout ce que tu veux c'est que le code qu'on vient de rajouter ne s'applique plus dès lors que le joueur a un objet d'inventaire de sélectionné. Ce qu'il faudrait donc faire, c'est entourer ce bloc de code d'un if qui vérifie si le joueur a sélectionné un objet d'inventaire ou non. Et comme AGS est super bien prévu, cette fonction existe ! Elle s'appelle Character.ActiveInventory (j'avoue qu'elle est pas facile à trouver celle-là).

EDIT : Oups ! J'avais pas lu ton code très attentivement, je vois que tu utilises déjà cette propriété ^^
En fait tu te compliques juste un peu la vie clin d\\\\'oeil


Tu pourras donc entourer le code qu'on a placé dans repeatedly_execute de la façon suivante :
Code:
function repeatedly_execute() {

  // Si le joueur n'a aucun objet d'inventaire de sélectionné...
  if (player.ActiveInventory == null) {

    // ... Le bloc de code pour gérer les curseurs

  }
  // Fin du bloc if

}
Voilà, je sais pas si c'est tout à fait ce que tu voulais. Essaye et dis-moi si ça fonctionne clin d\\\\'oeil

_________________
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
valoulef
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 1389

Age : 28

Localisation : Condate

Date d'inscription : 01/08/2011


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Lun 15 Aoû 2011 - 13:47

Evidemment, vu comme ça ça paraît logique (cela concerne l'ensemble du message). C'est vrai que quand on découvre tout en même temps, il y a certains trucs simple auxquels on ne pense pas. A vrai dire ma technique marche pas mal, mais c'est un peu le bordel pour réactiver le mode Interact au bon moment (en fait, je n'avais que celui-ci à désactiver apparemment)

J'essaierai ce que tu me dis dès que j'aurais un moment, en ce moment, je n'ai pas beaucoup le temps de passer sur mon ordi.

Merci beaucoup encore une fois sourire

_________________
"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 En ligne
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   Jeu 10 Mai 2012 - 20:34

Bonjour,

j'avais les mêmes objectifs et problèmes que valoulef, et grace à ce forum et Kitai, je pense les avoir résolus.
Voici ma solution complète, pour faire un gameplay moderne sous AGS (clic gauche, action, clic droit regarder). N'hésiter pas à la commenter !
Quand je serais grand, j'en ferais peut-être un template...

Dans le GlobalScript.asc, fonction repeatedly_execute() :

Code:
function repeatedly_execute()
{
    //Si le curseur passe sur un hotspot ou un objet, il passe en mode interagir
  if (player.ActiveInventory == null){
   
      if((GetLocationType(mouse.x, mouse.y)==eLocationHotspot)||(GetLocationType(mouse.x, mouse.y)==eLocationObject))
      mouse.Mode = eModeInteract;
 
      if(GetLocationType(mouse.x, mouse.y)==eLocationNothing)
      mouse.Mode = eModeWalkto;
 
      if(GetLocationType(mouse.x, mouse.y)==eLocationCharacter)
      mouse.Mode = eModeTalkto;
   
      if (InventoryItem.GetAtScreenXY(mouse.x, mouse.y)!= null)
      mouse.Mode = eModeInteract;
    }
   
  //Gui visible en haut
  if (mouse.y <= 50) {
    if (gGui1.Y < 0) gGui1.Y+=10;
  }
  if (mouse.y > 150) {
    if (gGui1.Y > -100) gGui1.Y-=10;
  }

}

et dans le on_mouse_click() :
Code:

function on_mouse_click(MouseButton button) // called when a mouse button is clicked. button is either LEFT or RIGHT
{
  if (IsGamePaused() == 1) // Game is paused, so do nothing (ie. don't allow mouse click)
  {
  }
  else if (button == eMouseLeft)
  {
    ProcessClick(mouse.x,mouse.y, mouse.Mode);
  }
  else // right-click, so cycle cursor
  { 
    if (player.ActiveInventory != null)
    player.ActiveInventory = null;
    else
    ProcessClick(mouse.x, mouse.y, eModeLookat);
  }
}

Voilà ! J’espère que ça pourras en aider certains. Prochaine étape : le double clic pour courire / se téléporter. grand sourire
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
Contenu sponsorisé




MessageSujet: Re: [Résolu] Changer de curseur selon ce qu'il survole   

Revenir en haut Aller en bas
 
[Résolu] Changer de curseur selon ce qu'il survole
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] Changer de curseur selon ce qu'il survole
» [résolu]changer tileset
» [Résolu] Changer d'avatar
» [résolu]Changer de fond de combat si ennemi tuer
» [Résolu] Changer les touches directionnelles de base

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: