Adventure Games Studio fr
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilRechercherS'enregistrerConnexion
Le deal à ne pas rater :
-20€ dès 299€ en plus des SOLDES
Voir le deal

 

 Fonction On Click en commun

Aller en bas 
AuteurMessage
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 186

Date d'inscription : 21/05/2020


Fonction On Click en commun Empty
MessageSujet: Fonction On Click en commun   Fonction On Click en commun EmptyLun 10 Aoû 2020 - 11:47

Bonjour !

J'ai découvert il y a peu qu'on peut affilier la même fonction "Quelquechose_OnClick" à plusieurs entités. Par exempl plusieurs boutons qui ont le même effet, ou alors dont l'opération qui en résulte peut être synthétisée sous une forme "générique", avec une loop par exemple. Cela permet de gagner une sacré quantité de lignes dans le script (ce fut mon cas sourire ), de le rendre plus lisible et plus adapté à des mises à jours ultérieures, si par exemple on fait des boucles avec des variables en condition (suffit de modifier la variable en haut du script pour que la boucle prenne en compte ce changement, pas besoin de fouiller partout et changer à chaque fois le paramètre !).

J'ai réussi à le faire pour des boutons, avec l'intitulé de la fonction :

Code:
function LeBouton_OnClick(GUIControl *control, Mousebutton *button)

Est-ce possible de faire de même avec des personnages (characters) ? Dans mon jeu, j'ai 50 personnages qui ont la même fonction Anyclick :

Code:
function cJoshua_AnyClick() // Un des persos
{
playerID=cJoshua.GetProperty("PersonnageID"); // une propriété personnalisée de mes personnages, cela l'identifie dans la structure qui leur est dédiée
cJoshua.Anyclick_Personnage(); // la fonction qui gère le click, et qui s'adapte au personnage cliqué grâce à la variable "playerID" définie juste au dessus
}

function cKim_AnyClick() // idem pour un autre perso
{
playerID=cKim.GetProperty("PersonnageID");
cKim.Anyclick_Personnage();
}
// Et ainsi pour les autres personnages

Et c'est TRES probable que j'ai besoin d'en rajouter d'autres, qui auront les mêmes fonctions Anyclick. Sauf que je ne vois pas d'argument dans la fonction "AnyClick" de AGS (à l'inverse des Button_OnClick (GUIControl *control etc...). Pour moi l'idée serait de faire quelque chose comme :

Code:
function Perso_AnyClick(this Character*)
{
playerID=this.GetProperty("PersonnageID");
this.Anyclick_Personnage();
}

ça simplifierait le code, et au moins pas besoin chaque fois que j'ajoute un perso au jeu de refaire une fonction Anyclick dédiée à ce perso sourire

Voilà, si quelqu'un sait comment faire cela, c'est top !
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai

Nombre de messages : 2818

Date d'inscription : 01/08/2006


Fonction On Click en commun Empty
MessageSujet: Re: Fonction On Click en commun   Fonction On Click en commun EmptyLun 10 Aoû 2020 - 15:39

Je peux me tromper, mais j'ai pas l'impression que la méthode this soit envisageable (dans AGS, soit ta fonction est explicitement codée comme une méthode appelée sur une entité, soit c'est une fonction globale).

Puisque AnyClick se déclenche à l'instant où ta souris survole ton personnage, tu peux utiliser GetAtScreenXY pour récupérer le perso survolé. Il me semble que le any click aussi bien que GetAtScreenXY vont détecter le même perso en cas de chevauchement, donc ça devrait pas poser conflit

_________________
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 En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 186

Date d'inscription : 21/05/2020


Fonction On Click en commun Empty
MessageSujet: Re: Fonction On Click en commun   Fonction On Click en commun EmptyLun 10 Aoû 2020 - 20:59

OK ! Du coup, ça pourrait être quelque chose comme ça :

Code:
function cJoshua_AnyClick() // Fonction d'origine pour les persos (Joshua en exemple)
{
playerID=cJoshua.GetProperty("PersonnageID"); // une propriété personnalisée de mes personnages, cela l'identifie dans la structure qui leur est dédiée
cJoshua.Anyclick_Personnage(); // la fonction qui gère le click, et qui s'adapte au personnage cliqué grâce à la variable "playerID" définie juste au dessus
}

function Personnage_AnyClick()
{
playerID=Character.GetAtScreenXY(mouse.x, mouse.y).GetProperty("PersonnageID");
Character.GetAtScreenXY(mouse.x, mouse.y).Anyclick_Personnage();

confus ??
Revenir en haut Aller en bas
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
Kitai

Nombre de messages : 2818

Date d'inscription : 01/08/2006


Fonction On Click en commun Empty
MessageSujet: Re: Fonction On Click en commun   Fonction On Click en commun EmptyLun 10 Aoû 2020 - 22:20

EDIT : OK je pense que j'ai mal lu ton code en exemple, c'est la comparaison "avant"/"après" c'est ça ? Dans ce cas oui, c'est pas mal, mais je ferais plutôt un truc dans ce genre :
Code:
function Personnage_AnyClick()
{
  Character* perso_clique = Character.GetAtScreenXY(mouse.x, mouse.y);
  playerID=perso_clique.GetProperty("PersonnageID");
  perso_clique.Anyclick_Personnage();
}

Deux remarques : 1) les version plus récentes d'AGS ajoutent un système de viewport, tu devrais prendre ça en compte quand tu utilises GetAtScreenXY il me semble
2) j'ai un peu l'impression que tu ajoutes une couche superflue là, puisque tu finis par appeler Anyclick_Personnage sur le personnage cliqué en ayant pris soin de mettre à jour playerID avant. J'ai l'impression que tu pourrais juste copier le contenu de Anyclick_Personnage directement dans Personnage_AnyClick, mais peut-être que je me trompe.

MESSAGE ORIGINAL :

Je pensais que ton intention était de traiter l'événement Any Click sur les persos de façon parallèle à comment tu traites l'événement Click sur les boutons, c'est-à-dire dans les deux cas appeler une seule et même fonction générale quel que soit l'élément sur lequel l'événement se produit.
Du coup je vois pas très bien pourquoi tu veux garder cJoshua_AnyClick, toute l'idée étant d'appeler Personnage_AnyClick (tel que tu l'as nommée) lors d'un clic sur n'importe quel personnage. Pratiquement parlant, ça veut dire écrire Personnage_AnyClick dans la ligne "Any click" de la grille d'événements de tout personnage, tout comme (de ce que j'ai compris) tu écris déjà LeBouton_OnClick dans la ligne "Click" de la grille d'événements de tout bouton de GUI

_________________
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 En ligne
Baguettator
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
Baguettator

Nombre de messages : 186

Date d'inscription : 21/05/2020


Fonction On Click en commun Empty
MessageSujet: Re: Fonction On Click en commun   Fonction On Click en commun EmptyMar 11 Aoû 2020 - 8:39

Oui, pardon j'ai oublié de le préciser, c'était la comparaison avant/après sourire

Effectivement ton code est bien plus clair que le mien, je vais l'utiliser !

1) Je ne comprends pas ce que c'est que le Viewport ?!? Késako ? sourire

2) Effectivement, peut-être que ça serait plus simple et réductible à une fonction en oubliant la variable playerID, mais l'avantage c'est que j'ai balancé la fonction Anyclick_Personnage dans un autre Script dédié à cela, ce qui allège le Global Script de quasi 500 lignes. Plus lisible, et en plus, mes personnages sont divisés en 4 catégorie (il y a des humains, des compagnons, des chiens et des véhicules), donc il y a une fonction pour chaque catégorie. Donc je ferai 4 fonctions "génériques" dans le Global Script et ça ira très bien. Peut-être qu'à terme je verrai pour simplifier cela, mais ça reviendrait à passer par d'autres variables sans doute, des loops...

Merci pour le coup de main, je vais tester ça !
Revenir en haut Aller en bas
Contenu sponsorisé




Fonction On Click en commun Empty
MessageSujet: Re: Fonction On Click en commun   Fonction On Click en commun Empty

Revenir en haut Aller en bas
 
Fonction On Click en commun
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Review] 20012 Click (vidéo)
» Recharger son titre de transport en commun avec son lapin !
» Two Dollard Click
» [Sets] Click : Le compagnon de Mata-Nui
» [Blog] Mon bouclier Mata-Nui --- Click.

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: