Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -55%
Friteuse sans huile – PHILIPS – Airfryer ...
Voir le deal
49.99 €

 

 Fonction On Click en commun

Aller en bas 
2 participants
AuteurMessage
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 232

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 : 2907

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
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 232

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 : 2907

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
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 232

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
-
» Question existentielle sur le click gauche et le click droit ! :)
» Un nouveau projet de jeu commun
» Point and click?
» Scénario pour Projet commun
» Cherche dessinateurs pour un projet commun

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: