Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le deal à ne pas rater :
Code promo Nike : -25% dès 50€ d’achats sur tout le site Nike
Voir le deal

 

 [Module] ShowInteractiveAreas

Aller en bas 
3 participants
AuteurMessage
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyVen 23 Nov 2012 - 20:40

Comme j'ai du mal à dessiner une barque, je me suis dit que j'allais plutôt rééquilibrer mon ratio modules / jeux postés sur se forum.
Ce fut laborieux mais enrichissant. Voici donc :

ShowInteractiveAreas
(fichier zip, lien dropbox, 6.77 ko)

05/07/2013 Nouvelle version : v1.3 : Tant qu'a faire, les hotspots non activés (Enabled) ne sont plus affichés non plus.
04/07/2013 Nouvelle version : v1.2 : Les objets non cliquables ne sont plus pris en compte.
20/03/2013 Nouvelle version : v1.1 : Le module fonctionne même lorsque le joueur se déplace.
30/11/2012 Nouvelle version : v1.0 : Amélioration de la détection des hotspots.
24/11/2012 Nouvelle version : beta 0.2 : Détermination automatiques des coordonnées des hotspots.

-ShowInteractiveAreas : un module qui montre au joueur les Zones interactives
-Installation et configurations
-Protips
-Appel aux testeurs volontaires
-Édition alternative
-Code des modules

ShowInteractiveAreas : un module qui montre au joueur les Zones interactives


Imaginons un joueur débutant débutant un Point & Clic :
[Module] ShowInteractiveAreas 1353695513-avant
Joueur débutant a écrit:
Oh non ! Mais où sont donc les zones interactives sur lesquels je doit cliquer pour progresser dans ce Point & Click ?
*appuie sur la barre d'espace*
[Module] ShowInteractiveAreas 1353695523-apres
Tada ! Les zones interactives sont délicatement indiquées au joueur débutant par des discrets mais néanmoins jolis curseurs !
Une telle option qui facilite la chasse aux zones interactives est présente dans la plupart des Point & Click modernes, même si elle est critiquée par tout bon Hard Core Point & Clickeur qui se respecte.
C'est cette option qui est codée dans le module ShowInteractiveAreas.
Suite à une pression sur la barre d'espace, le module calcule la position des objets, des hotspots et des personnages de la pièce pour afficher dessus en tant que calque un curseur de la souris (par défaut, celui des eModeInteract et eModeTalkTo).
Le module est publié sous une licence très permissive qui vous permet de faire à peu près n'importe quoi avec.

Installation et configurations

Dézippez ShowInteractiveAreas.zip
Ouvrez votre projet AGS
Faites un clic droit sur "Scripts"
Cliquez sur "Import script..."
Ouvrez "ShowInteractiveAreas.scm"
Et voilà !

Protips

Quelques conseils pour les plus bidouilleurs d'entre vous. Je serais bref mais je détaillerai avec joie chaque étape qui vous intéressera.
-Vous pouvez rendre ce module optionnel via un booléen (sia_CheatEnable) en créant une option modifiant la valeur de ce booléen.
-Vous pouvez désactiver ce module dans certaines pièces ou dans certaines situations via un booléen (sia_EnableHere).
-Si vous voulez afficher un sprite spécifique et pas un curseur de souris, c'est tout à fait possible.
-Vous pouvez aussi afficher un sprite différent en fonction de propriétés spécifiques de vos objets / hotspots / personnages.
-Et bien sur, vous pouvez changer la touche déclencheur, qui est par défaut la barre d'espace.

Appel aux testeurs volontaires

C'est mon premier module. Il est toujours en phase de béta.
Je serai ravi d'avoir vos retours concernant son utilité potentiel, mais aussi vos conseils quand à des optimisations possibles.
En particulier, si un génie pouvait me dire comment obtenir les coordonnées d'un Hotspot facilement, je lui serai très reconnaissant. C'est résolu. sourire
Je l'ai testé avec succès sur ProjetPilote et sur mon projet secret.
S'il fonctionne avec vos projets, je serai enchanté de l'apprendre. Si vous rencontrez un bug, n'hésitez pas à le signaler.
Si vous remarquez des fautes d’orthographes dans les fichiers textes ou commentaires de module, idem.
J'ai essayé de me conforter aux chartes disponible sur le forum anglophone. Particulièrement celle-ci et celle-ci, mais je les ai peut-être mal comprises, donc n'hésitez pas à me corriger.
En fonction de vos retours je publierai ce module chez eux, où alors je le cacherai tout au fond d'une cave, sous un tapis. sourire

_________________
Mon petit DevBlog


Dernière édition par Billbis le Ven 6 Sep 2013 - 14:57, édité 16 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyVen 23 Nov 2012 - 20:43

Show Interactive Areas *Édition Alternative*
L'édition standard de ShowInteractiveAreas détermine automatiquement la position à laquelle les curseurs seront placés sur les hotspots. Si c'est une capacité super cool du module, elle vient avec deux défauts :
-Comme la positon des hotspots est déterminé de façon approximative, les petits hotspots (<<< 1/1000éme de la surface de l'écran) ne seront pas toujours détectés du premier coup.
-Si votre hostpot est fragmenté / troué, le curseur pourra parfois être placé dans une zone où il n'y a pas de hotspot !

L'édition alternative de Show Interactive Areas viens répondre à ces deux défaut, mais pour cela elle abandonne la détection automatique des hotspots. Vous devez alors rentrer manuellement les coordonnées voulues dans deux propriétés personnalisées (Custom Property) pour chaque hotspot.

Si l'installation et le mode de fonctionnement globale du module se passe majoritairement comme pour l'édition standard, vous devez en plus créer deux propriétés personnalisées. Pour cela, séléctionnez un hotspot dans l'éditeur AGS, en bas de sa fenêtre de paramêtres, cliquez sur "(Properties)", puis sur "Edit schema...", et enfin faîtes un clic droit sur la fenetre ainsi ouverte et cliquez sur "Add new property...". Il faut ensuite configurer deux propriétés comme cela :
[Module] ShowInteractiveAreas 1373053191-customproperties
C'est a dire les nommer très exactement "sia_PropX" et "sia_PropY", leur donner une valeur numérique, par défaut de -1, et s'appliquant aux Personnages, Objets et Hotspots.
Pour les hotspots, tant que vous laissez la valeur -1, aucun curseur ne sera dessiné. Rentrez la coordonnée x relative à la pièce dans sia_PropX et la coordonnée y relative à la pièce dans sia_PropY.
*Astuce* Vous pouvez copier un couple de coordonnées depuis l'éditeur en faisant un clic centrale (molette) à l'endroit voulu de votre pièce.
Pour les personnages et objets, si vous laissez la valeur par défaut, leurs coordonnées seront automatiquement calculées en temps réel. Si vous spécifiez un couple de coordonnées, ces coordonnées seront utilisées en priorité. Attention, il s'agit de coordonnées relative à la pièce.

_________________
Mon petit DevBlog


Dernière édition par Billbis le Ven 6 Sep 2013 - 14:58, édité 7 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyVen 23 Nov 2012 - 20:44


Code du module, édition standard

ShowInteractiveAreas.ash
Spoiler:

ShowInteractiveAreas.asc
Spoiler:


Code du module, édition alternative

ShowInteractiveAreas.ash
Spoiler:

ShowInteractiveAreas.asc
Spoiler:

_________________
Mon petit DevBlog


Dernière édition par Billbis le Ven 5 Juil 2013 - 19:52, édité 7 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 12:20

Waoh, option essentielle s'il en est.
Félicitations pour ce premier module qui semble assez... modulable !

En ce qui concerne le côté plus technique, ça semble assez propre.
Quelques questions cependant : pourquoi utiliser des tableaux dynamiques pour les coordonnées des personnages et des objets, alors que les propriétés X et Y de chaque instance des tableaux pré-intégrés character et object te permettent de récupérer ces coordonnées ?

Billbis a écrit:
En particulier, si un génie pouvait me dire comment obtenir les coordonnées d'un Hotspot facilement, je lui serai très reconnaissant.
Mazette, je ne serai pas ce génial génie. Le problème est que les zones interactives peuvent être dessinées de façon discontinue : tu peux avoir un bout à gauche, et un bout à droite (si à gauche et à droite de la pièce se trouvent deux objets identiques et qu'il n'y a donc pas besoin de dissocier leurs interactions).
Alors évidemment, dans ce cas-là il sera tout aussi problématique de définir une seule paire de coordonnées (X,Y) pour ton module... Mais c'est une situation qu'il faut prendre en compte. En théorie rien n'empêche non plus le développeur d'un jeu d'utiliser une seule image représentant deux objets scindés pour un objet. Bref.

Une éventuelle solution pas du tout économe pour détecter automatiquement les zones interactives serait de balayer l'écran avec la propriété GetAtScreenXY.
Ça donnerait quelque chose comme ça :
Code:
Hotspot* zone;
int x, y;
int min_x[], min_y[], max_x[], max_y[];
min_x = new int[sia_HOTSPOT_LIMIT]; // La coordonnée la plus à gauche de la zone
min_y = new int[sia_HOTSPOT_LIMIT]; // La coordonnée la plus en haut de la zone
max_x = new int[sia_HOTSPOT_LIMIT];  // La coordonnée la plus à droite de la zone
max_y = new int[sia_HOTSPOT_LIMIT];  // La coordonnée la plus en bas de la zone
int i = 0; // Au départ, on suppose que les coordonnées minimales sont maximales
while (i < sia_HOTPOST_LIMIT) {
  min_x[i] = SCREEN_W;
  min_y[i] = SCREEN_H;
  i++;
}
while (x < SCREEN_W) { // On va balayer X
  while (y < SCREEN_H) { // On va balayer Y
    zone = Hotspot.GetAtScreenXY(x, y);
    if (zone != null) { // S'il y a une zone à (X, Y)
      // Si X est plus à gauche que la coordonnée la plus à gauche
      // qu'on avait trouvée auparavant pour cette zone
      if (min_x[zone.ID] < x) min_x[zone.ID] = x;
      // Si Y est plus haut que la coordonnée la plus haute
      // qu'on avait trouvée auparavant pour cette zone
      if (min_y[zone.ID] < y) min_y[zone.ID] = y;
      // Si X est plus à droite que la coordonnée la plus à droite
      // qu'on avait trouvée auparavant pour cette zone
      if (max_x[zone.ID] > x) max_x[zone.ID] = x;
      // Si Y est plus bas que la coordonnée la plus basse
      // qu'on avait trouvée auparavant pour cette zone
      if (max_y[zone.ID] > y) max_y[zone.ID] = y;
    }
    y++;
  }
  x++;
}
i = 0; // On va calculer le centre de chaque paire
while (i < sia_HOTSPOT_LIMIT) {
  siaHotspotX[i] = (min_x[i] + max_x[i]) / 2;
  siaHotspotY[i] = (min_y[i] + max_y[i]) / 2;
  i++;
}
min_x = null; // On supprime les tableaux dynamiques
min_y = null; // pour libérer de la mémoire
max_x = null;
max_y = null;
Je n'ai pas testé ce code mais je pense qu'il devrait fonctionner (modulo la définition de SCREEN_W et SCREEN_H bien sûr).

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 12:43

Remarque judicieuse concernant les tableaux -dynamiques ou non- qui sont en fait totalement inutiles et facilement remplaçable par des int touts simples. Je vais essayer de modifier ça. Ils datent d'une époque où je voulais séparer les while d'identifications et les while de dessin, mais comme on peu les pooler très simplement, ils n'ont plus lieu d'être.

Concernant la solution de balayage de l'écran, je voulais à tout pris l'éviter de par sa lourdeur, surtout avec les grandes résolutions. Voir par exemple ce sujet en Anglais. Notons que pour une résolution importante, un tel script fera bugger AGS si on ne rajoute pas un noloopcheck (1024 * 768 >> 150 000). ^^
Cela dit, je ne l'ai pas testé pour savoir combien de temps elle met en pratique. Il faudra que j'essaye. Pour le balayage, on peut même envisager de ne screener qu'un pixel sur deux, ce qui divise le temps de calcul par 4 tout en ne perdant que très peu en précision dans le calcul du centre de l'objet. Reste que ça fait tout de même une solution dont le temps de calcul est extrêmement dépendant de la résolution, ce qui pour un module est assez inadapté.

EDIT : Sinon, on peut aussi jeter au hasard 1000 ou 10000 points sur l'écran, prendre le barycentre des points qui tombent dans une même zone.ID. Il faut voir ce que ça donne pour trouver un bon nombre de points en fonction de la taille de l'écran et des zones interactives.

_________________
Mon petit DevBlog


Dernière édition par Billbis le Sam 24 Nov 2012 - 21:14, édité 1 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 14:12

Billbis a écrit:
Voir par exemple ce sujet en Anglais. Notons que pour une résolution importante, un tel script fera bugger AGS si on ne rajoute pas un noloopcheck (1024 * 768 >> 150 000). ^^
Bien vu !

Billbis a écrit:
Reste que ça fait tout de même une solution dont le temps de calcul est extrêmement dépendant de la résolution, ce qui pour un module est assez inadapté.
Ça dépend : tu peux en effet non seulement réduire l'efficacité du scan en ne scrutant qu'un pixel sur deux, mais surtout ce n'est pas trop grave si ça prend du temps uniquement au chargement de la pièce (vous vous êtes jamais demandé pourquoi les jeux affichaient "chargement en cours" avant d'entrer dans les pièces ? ^^).
Il suffit de placer ton balayage dans la fonction on_event. Évidemment vérifie quand même le temps que ça prend en 1024*780 parce que si ça prend genre plus de 2-3 secondes, ça va faire long le chargement de la pièce.

EDIT :
Billbis a écrit:
EDIT : Sinon, on peut aussi jeter au hasard 1000 ou 10000 points sur l'écran, prendre le barycentre des points qui tombent dans une même zone.ID. Il faut voir ce que ça donne pour trouver un bon nombre de points en fonction de la taille de l'écran et des zones interactives.
J'aime ! Je n'ai jamais cherché de méthodes inexactes optimales, c'est très judicieux comme procédé ce que tu proposes là.

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 15:01

Hihi, très bon conseil de faire le screening des Hotspots à l’entrée de la room, je n'y avait pas pensé. Superbe idée. Je pense que c'est ce que je vais faire pour la prochaine version du module. Je vais aussi voir ce que je peux faire pour les objets et personnages mobiles. Si ça marche, sa réhaussera grandement la valeur ajouté de ce module !

EDIT : décidément, je n'arriverai jamais à faire un poste du premier coup. Juste pour dire que si on appel la fonction de balayage dans le on_event RoomBeforeFadeIn, il faut balayer sur toute la pièce, et non sur tout l'écran. Ce qui alourdit d’autant plus le processus que la pièce est grande.

Re-EDIT : Pourquoi dans ton code tu définis min_x, min_y, max_i et max_y comme des dynamic arrays et pas comme des arrays tout cours ?

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 17:13

Billbis a écrit:
EDIT : décidément, je n'arriverai jamais à faire un poste du premier coup. Juste pour dire que si on appel la fonction de balayage dans le on_event RoomBeforeFadeIn, il faut balayer sur toute la pièce, et non sur tout l'écran. Ce qui alourdit d’autant plus le processus que la pièce est grande.
Ah oui j'avais pas pensé à ça...
Bah, faut voir le temps que ça prend effectivement, mais sinon le coup de la propriété personnalisée ça marchait aussi pas mal clin d'oeil

Billbis a écrit:
Re-EDIT : Pourquoi dans ton code tu définis min_x, min_y, max_i et max_y comme des dynamic arrays et pas comme des arrays tout cours ?
En fait j'ai juste pas réfléchi. Puisque sia_HOTSPOT_LIMIT est défini directement comme un nombre, tu peux en effet en faire des tableaux non dynamiques.

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 17:33

Juste un petit mot pour dire que jeter 10000 points au hasard ça marche nickel, et c'est très rapide sur mon PC. Je fignole tout ça et je met à jour le module. Plus besoin de rentrer des coordonnées de hotspots en custom properties. Youpi !
cool

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptySam 24 Nov 2012 - 21:02

Je me permet un double post pour annoncer une nouvelle version de ce module.

*NOUVEAU* Détermination automatique des coordonnées des hotspots. *NOUVEAU*
Les trois premiers posts ont été mis à jour en conséquences. Les curieux remarquerons, en lisant le code disponible au troisième post, que j'ai opté pour une détermination probabiliste des coordonnées des hotspots. En gros, on jette 10 000 points au hasard sur l'écran, et on calcul le barycentre des points qui tombe sur un même hotspots.
Ça fonctionne étonnement bien. grand sourire

Pour vous donner une idée, et si mes calculs sont justes, pour 10 000 lancés et une résolution de 1024 x 786, les hotspots de 55 pixels de surface (soit moins de 8 x 8 de cotés) sont détectés une fois sur deux. Mais honnêtement, qui fait des Hotspots si petits dans un jeu en 1024 x 786 ?

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 25 Nov 2012 - 10:03

Puis-je te suggérer, malgré ta finalisation du module, de considérer d'utiliser la fonction IsInteractionAvailable pour vérifier que la zone interactive/l'objet/le personnage détecté déclencherait bien un événement dans le cas où le joueur clique dessus ?

Je pense notamment à tous ces objets qu'on met dans les pièces sans pour autant leur associer d'interaction particulière.

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 25 Nov 2012 - 10:18

Le module n'est pas finit, il est juste passé de la béta 0.1 à la béta 0.2 la nuit dernière.
Ta remarque est judicieuse, une foi de plus. Pour les objets décoratifs, j’avais pensé faire une custom properties (j'aime bien les custom properties), mais vu que la fonction IsInteractionAvailable existe, autant s'en servir. Pour les personnages, la propriété clickable devrait suffire, et pour les hotspots -pourquoi créer un hotspot si aucune interaction n'est possible ?- la propriété Enable devrait suffire aussi.
Je vais implémenter ça pour la 0.3. Je vais aussi essayer d'optimiser la détection de hotspot : l’algorithme gardera en mémoire les coordonnées précédentes tant que le joueur n'aura pas changé de pièce.

_________________
Mon petit DevBlog


Dernière édition par Billbis le Lun 26 Nov 2012 - 16:32, édité 1 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 25 Nov 2012 - 10:41

Billbis a écrit:
Pour les personnages, la propriété clickable devrait suffire, et pour les hotspots -pourquoi créer un hotspot si aucune interaction n'est possible ?- la propriété Enable devrait suffire aussi.
Oui oui sans doute, mais n'est-ce pas plus pratique d'utiliser IsInteractionAvailable pour tout ?
Un personnage peut être clickable sans pour autant avoir d'interaction associée (un PNJ non interactif par exemple) et un hotspot peut être utilisé de moult façons, sans pour autant que des interactions y soient associées, une fois qu'on met les mains dans le cambouis du script clin d'oeil
Billbis a écrit:
Je vais aussi essayer d'optimiser la détection de hotspot : l’algorithme gardera en mémoire les coordonnées précédentes tant que le joueur n'aura pas changé de pièce.
N'oublie pas que le joueur peut se déplacer dans la pièce et que le décalage à l'écran est donc variable.
En l'état il me semble que ton code ne scanne que l'écran (ça marche vraiment d'ailleurs ces propriétés ScreenWidth/ScreenHeight ? Je croyais que ça n'avait pas de rapport direct avec la résolution du jeu). Si vraiment tu veux garder en mémoire des données, je réitère ma suggestion de placer la détection dans la fonction on_event.

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 25 Nov 2012 - 15:06

IsInteractionAvailable n'est que moyennement pratique, vu qu'il faut spécifier le mode d'interaction en question... donc il faut screener tous les modes pour toutes les zones interactives identifiés, car si une seule interaction est possible ça vaut le coup de l'indiquer en zone interactive. J'ai peur que ça commence à faire lourd.
Kitai a écrit:
un hotspot peut être utilisé de moult façons, sans pour autant que des interactions y soient associées, une fois qu'on met les mains dans le cambouis du script
Je ne doute pas que de telles personnes sauront tout à fait adapter mon module à leur usage. clin d'oeil

A ma grande surprise, et malgré ce blabla incompréhensible du manuel d'AGS :
Code:
cJ.Say("Game is running at: %d x %d, %d-bit colour", System.ScreenWidth, System.ScreenHeight, System.ColorDepth);
Renvoi un très jolie :
J. a écrit:
Game is running at: 1024 x 768, 32-bit colour
Ce n'est pas la première fois que l'aide d'AGS me semble un peu bancale...

Kitai a écrit:
N'oublie pas que le joueur peut se déplacer dans la pièce et que le décalage à l'écran est donc variable.
En l'état il me semble que ton code ne scanne que l'écran

Bien vu ! Soit je bidouille un truc avec le viewport, soit j’abandonne. Je crois que j'abandonne, car ça marche vraiment pas mal, là.

Kitai a écrit:
Si vraiment tu veux garder en mémoire des données, je réitère ma suggestion de placer la détection dans la fonction on_event.
A ma grande honte, je n'ai pas réussit à coder un truc potable pour que le GetAtScreenXY fouille toute la pièce et pas juste l'écran. ^^ J'ai des progrès à faire, encore.

_________________
Mon petit DevBlog


Dernière édition par Billbis le Lun 26 Nov 2012 - 16:37, édité 2 fois
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 25 Nov 2012 - 16:03

Billbis a écrit:
IsInteractionAvailable n'est que moyennement pratique, vu qu'il faut spécifier le mode d'interaction en question... donc il faut screener tous les modes pour toutes les zones interactives identifiés, car si une seule interaction est possible ça vaut le coup de l'indiquer en zone interactive. J'ai peur que ça commence à faire lourd.
Je ne pense pas que ça alourdisse tant que ça l'exécution, d'autant moins si tu arrêtes d'explorer les modes dès que la fonction retourne 1 pour un mode (ce qui devrait être le cas pour la plupart des éléments interactifs).

Billbis a écrit:
A ma grande surprise, et malgré ce blabla incompréhensible du manuel d'AGS :
Code:
cJ.Say("Game is running at: %d x %d, %d-bit colour", System.ScreenWidth, System.ScreenHeight, System.ColorDepth);
Renvoi un très jolie :
J. a écrit:
Game is running at: 1024 x 768d, 32-bit colour
Ce n'est pas la première fois que l'aide d'AGS me semble un peu bancale...
Hm, je pense simplement que l'aide n'est pas à jour. Par "largeur/hauteur véritable", je pense que CJ voulait dire "pas en coordonnées de la pièce (basse résolution)".
C'est bon à savoir en tout cas

Billbis a écrit:
Bien vu ! Soit je bidouille un truc avec le viewport, soit j’abandonne. Je crois que j'abandonne, car ça marche vraiment pas mal, là.
Billbis a écrit:
A ma grande honte, je n'ai pas réussit à coder un truc potable pour que le GetAtScreenXY fouille toute la pièce et pas juste l'écran. ^^ J'ai des progrès à faire, encore.
Il me semble que ce n'est pas si compliqué que ça : plutôt que d'avoir un random sur ScreenWidth et ScreenHeight, tu en fais un d'après les dimensions de la surface (en résolution réelle) de fond de la pièce. Ensuite tu soustraies GetViewPortX ou GetViewPortY quand tu passes la coordonnée dans GetAtScreenXY.

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyMer 28 Nov 2012 - 18:18

Kitai a écrit:
Il me semble que ce n'est pas si compliqué que ça : plutôt que d'avoir un random sur ScreenWidth et ScreenHeight, tu en fais un d'après les dimensions de la surface (en résolution réelle) de fond de la pièce. Ensuite tu soustraies GetViewPortX ou GetViewPortY quand tu passes la coordonnée dans GetAtScreenXY.
Oui, c'était pas très compliqué. La prochaine version gardera en mémoire les hotspots précédemment trouvés tant que le joueur ne quitte pas la pièce. Donc, une fois qu'il aura trouvé un petit hotspot, l’algorithme l'affichera correctement toute les fois suivantes. Je vous ferai les calculs un peu plus tard, mais contrairement à avant, un (tout) petit hotspot aura de plus en plus de chance d'être détectés a chaque pression sur la barre d'espace.
La détection continu a ne se faire que sur l'écran, et pas sur toute la room. Plus j'y pense, moins j'ai envie de faire une détection sur toute une room, que ce soit dans un on_event ou à chaque on_KeyPresse, car la surface des rooms peu facilement varier de 1 à 10 ou 20. Donc en fonction des rooms, la précision de la détection où le temps de calculs ne seront pas les mêmes, ce qui m’embête un peu.
confus

Kitai a écrit:
Billbis a écrit:

IsInteractionAvailable n'est que moyennement pratique, vu qu'il faut spécifier le mode d'interaction en question... donc il faut screener tous les modes pour toutes les zones interactives identifiés, car si une seule interaction est possible ça vaut le coup de l'indiquer en zone interactive. J'ai peur que ça commence à faire lourd.
Je ne pense pas que ça alourdisse tant que ça l'exécution, d'autant moins si tu arrêtes d'explorer les modes dès que la fonction retourne 1 pour un mode (ce qui devrait être le cas pour la plupart des éléments interactifs).
J'ai codé une petite fonction comme tu me l'as suggéré :
Code:
function siaIsAnInteractionAvailable (int x,  int y) {
  if (IsInteractionAvailable(x, y, eModeInteract) != 0)
    return true;
  else if (IsInteractionAvailable(x, y, eModeLookat) != 0)
    return true;
  else if (IsInteractionAvailable(x, y, eModePickup) != 0)
    return true;
  else if (IsInteractionAvailable(x, y, eModeTalkto) != 0)
    return true;
  else if (IsInteractionAvailable(x, y, eModeUseinv) != 0)
    return true;
  else
    return false;
}

Puis rajouté un petit :
Code:
if (siaIsAnInteractionAvailable(siaObjectX-GetViewportX(), siaObjectY-GetViewportY()))
au bon endroit, et ça fonctionne bien.
La preuve :
[Module] ShowInteractiveAreas 1354125023-bugisinterarea1
Le magnifique Trou Noir, qui est un objet sans aucune interaction, n'est pas affiché comme interactif. En revanche, la barque, qui possède des interactions, est bien identifiée comme zone interactive (bon, vous me faite confiance, elle est hors champ).
Par contre, ça fonctionne un peu trop comme attendu. Si Harris l'interactif passe devant le Trou Noir non interactif :
[Module] ShowInteractiveAreas 1354125027-bugisinterarea2
Et bien ne voilà t'il pas que le Trou Noir est affiché comme interactif ! Logique, vu mon script...
Du coup, cette vérification introduit quand même plus de problèmes qu'elle n'en résout. Il y a sans doute moyen de coder une usine à gaz pour faire tourner tout ça correctement, mais ça me tente moyen.
Une custom propertie (j' coeur les custom properties, elles sont so orienté objet) qui définie si un objet / personnage / hotspot doit ne pas être affiché me semble plus pratique.

Sinon, je renouvelle mon appel aux testeurs, quelqu'un a t-il essayé ce module sur son projet ? Fonctionne t-il comme attendu ? Depuis la beta 0.2 il s'installe et se désinstalle en un tour de clic.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyVen 30 Nov 2012 - 18:20

J'ai mis en ligne la nouvelle version, qui retient la position des hotspots déjà trouvés.
Pour l'occasion, j'ai passé le module en v 1.0 et je vais prochainement le poster sur le forum anglophone. Cela dit, je reste ouvert à toutes propositions d'amélioration ou d'optimistation. Et si je les refuse, n'hésitez pas à proposer votre fork.
clin d'oeil
De même, n'hésitez pas à héberger ce module sur votre serveur. sourire

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyVen 30 Nov 2012 - 19:06

Enh l'autre eh, il veut se faire héberger son module à l’œil !

Il faudra que je le teste à l'occasion, mais je ne passe pas sous Windows ces temps-ci et j'ai peu de temps libre.
Toutefois je pense que tu auras du retour de la part du forum anglophone, je pense que c'est une très bonne initiative (moi les conventions de modules m'ont chaque fois découragé à poster là-bas, alors que je pense que ces conventions sont inestimables...). Il faudrait que je me motive pour le faire un jour ou l'autre.

_________________
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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyMer 20 Mar 2013 - 21:03

Nouvelle version du module. Les premiers postes ont été mise à jour en conséquence.
Avant, le module ne fonctionnait pas lorsque le joueur se déplaçait, il fallait attendre la fin du mouvement pour que la barre d'espace ait un effet.
Maintenant, tant que la barre d'espace est enfoncé, le jeu est mis en pause et du coup, le module fonctionne correctement même lors des mouvement du joueur.

Kitai a écrit:
(ça marche vraiment d'ailleurs ces propriétés ScreenWidth/ScreenHeight ? Je croyais que ça n'avait pas de rapport direct avec la résolution du jeu).

Après re-lecture du manuel est quelques testes personnels, il apparait que system.ScreenWidth() renvoie la largeur de l’écran en tenant compte des bandes noirs latérales en mode plein écran. Du coup, et même si ça fonctionnait apparemment sans problèmes, je les ai changé en system.ViewportWidth(). C'est plus propre. Donc tu avais (une fois de plus) raison.
^^

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 26 Mai 2013 - 12:36

Le début de la gloire :
Mon module est maintenant crédité dans au moins un jeux AGS : A Cat's Night 2 par WarioPunk / PuNKKoMmANDO77.
cool
[Module] ShowInteractiveAreas Jack-deal
Hé oui, je double poste à but purement égoïste, pour me vanter et flooder comme un gros troll.
sourire

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Shai-la
Ouvrière en Chef de la Grande Tasse Bleue
Ouvrière en Chef de la Grande Tasse Bleue
Shai-la


Nombre de messages : 6018

Age : 46

Localisation : Montpellier

Date d'inscription : 17/04/2006


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 26 Mai 2013 - 17:27

Bravo ^^
Revenir en haut Aller en bas
http://marionpoinsot.fr/video
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


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyDim 26 Mai 2013 - 17:40

Félicitations Billbis !

Grâce à toi, la communauté francophone continue de répandre sa toile petit à petit.
Qui sait, tu sera peut-être bientôt le nouveau Monsieur OUXX ? 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
http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyJeu 4 Juil 2013 - 19:25

Petite mise à jour mineure (v 1.3). La principale modification est la non prise en compte des objets non cliquables (décoratifs) lors du dessin des curseurs. Je ne comprend pas bien pourquoi je ne l'ai pas fait dès les premières versions... mais c'est corrigé. Cette nouvelle version est rétrocompatible avec la précédente (qui elle même était rétrocompatible avec la v1.0).

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
Billbis


Nombre de messages : 1346

Date d'inscription : 10/05/2012


[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas EmptyVen 5 Juil 2013 - 19:57

Mise à jour du jour :
-v1.3 : Tant qu'a faire, les hotspots non activés (Enabled) ne sont plus affichés non plus. Et en plus j'ai fait un léger toilettage du code.
-v1.3 *Alternative Edition* : La détection automatique des coordonnées de hotspots disparait aux profits de coordonnées spécifiés manuellement par l'utilisateur, voir les premiers posts.

A vous de choisir
^^

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
http://nothingaboutthedog.blogspot.fr/
Contenu sponsorisé





[Module] ShowInteractiveAreas Empty
MessageSujet: Re: [Module] ShowInteractiveAreas   [Module] ShowInteractiveAreas Empty

Revenir en haut Aller en bas
 
[Module] ShowInteractiveAreas
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Plateau (module)
» Module Jeux de Tir
» [Module]SideViewFL - SideViewFaceLocation
» [résolu]module Savegames with screenshots de Andrew MacCormack
» Razorblade 3D 1.0, module 3D

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Modules et plugins-
Sauter vers: