|
| Script d'utilisation automatisée d'objets | |
| | |
Auteur | Message |
---|
Gob Adepte de la Grande Tasse Bleue
Nombre de messages : 123
Date d'inscription : 08/10/2021
| Sujet: Re: Script d'utilisation automatisée d'objets Sam 3 Fév 2024 - 17:49 | |
| ... Pourquoi ça ne marche jamais mes codes dans le forum ?? |
| | | Clique Adepte de la Grande Tasse Bleue
Nombre de messages : 106
Date d'inscription : 11/05/2022
| Sujet: Re: Script d'utilisation automatisée d'objets Sam 3 Fév 2024 - 19:33 | |
| Je viens de comprendre, c'est [code =ags] qui ne fonctionne pas. Utilise simplement la balise [code ][ /code] - Citation :
- pour l'histoire du else, je ne voyais pas l’intérêt dans le cas des objets, puisqu'il utilise un objet à la fois.
En fait c'est l'inverse, pour ce cas là t'as pas intérêt à faire succéder des blocs "if", même si logiquement ça fonctionnerait quand même. Coder ça se fait vite. Ce qui bouffe 80% du temps et de l'énergie, c'est de déboguer résoudre ou chercher des solutions. Donc prendre les bonnes habitudes / bonnes pratiques dès le départ, c'est un moyen de rationaliser cette 2e étape. ça t'obliges pas à passer en revue chacune des lignes du script. ça évite pas mal de soucis obscures, et t'as plus de chances de trouver des solutions/réponses à un problème en cherchant sur internet. En tout cas, pour que la fonction JSP fonctionne comme attendue, c'est absolument nécessaire. Elle est sensé s'exécuter quand toutes les autres éventualités sont exclues. Donc toutes ces éventualités se doivent d'être dans une même structure de contrôle. |
| | | Clique Adepte de la Grande Tasse Bleue
Nombre de messages : 106
Date d'inscription : 11/05/2022
| Sujet: Re: Script d'utilisation automatisée d'objets Dim 4 Fév 2024 - 7:28 | |
| - Gob a écrit:
- Ce que je vais essayer de retoucher, au moins par endroit, cs sont dans les cas comme ça:
- Code:
-
if (machin==false) { cGob1.Animate(3,3,eBlock); } if (machin==true) { cGob1.Animate(4,3,eBlock); } ... Et donc remplacer la deuxième variable par else, si tu penses que ça allège le travail du processeur. C'est une opération de moins, qui plus est (ici) inutile. Le gain de travail pour le processeur est infime, c'est surtout le principe d'optimiser son code. C'est quand toutes les optimisations sont mises bout à bout, qu'il y a un léger gain. Mais l'intérêt principal c'est qu'un code optimisé est plus facile à entretenir, et épargne de commettre certaines erreur. Ici par exemple, tu t'épargnerais le risque de faire une faute de frappe dans un nom de variable. Il y a un autre cran dans l'optimisation (que je te recommande pas), qui vise à trouver les formules les plus concises/efficaces. C'est réservé à un niveau très avancé, et plutôt à une phase finale de peaufinage. N'en parlons plus. Ce qu'il te faut (c'est largement recommandé) c'est un équilibre entre l'optimal et la lisibilité (clarté). - Citation :
- la question du mix cGob et player n'a jamais posé de problème puisque je sais qui est player. Et je sais aussi qui utilise quel objet.
J'en doute pas, mais du coups c'est une contrainte que tu t'imposes et qui n'a pas (à priori) de nécessité. Quand tu as à compléter, retoucher ou corriger cette partie du code, en plus de devoir relire et interpréter ton script tu dois aussi avoir en tête ton scénario. C'est naturel car ton approche du script et encore empirique. Je cherche juste à te sensibiliser à ce principe, car plus tu avanceras dans tes scripts, plus ça va te compliquer la tâche. |
| | | Gob Adepte de la Grande Tasse Bleue
Nombre de messages : 123
Date d'inscription : 08/10/2021
| Sujet: Re: Script d'utilisation automatisée d'objets Ven 29 Mar 2024 - 14:54 | |
| Hello, j'en reviens à la fonction JSP, qui me sert bien habituellement. J'ai un cas que je ne comprend pas. Avec Gob1, ça ne marche pas, il fait, en plus de l'anim prévue, l'anim générique d'utilisation automatique de l'objet. Avec Gob2, ça marche, il fait son anim et ne fait pas l'anim générique. Si j'inverse Gob1 et Gob2 dans le code, le problème s'inverse aussi. Voici le cas avec des codes simplifiés: - Code:
-
function cSecret_UseInv() { if ((cGob1.ActiveInventory == iPerro)&&(D06G1In==1)) { if(D06EntreeTruculo==false) { cGob1.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob1.Walk(699, 410, eBlock,eWalkableAreas);cGob1.FaceDirection(eDirectionRight);
if (D06SecretaireInterview==0) { D06SecretaireInterview=1; D06Reportage=D06Reportage+1; }}} if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) { if(D06EntreeTruculo==false) { cGob2.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob2.Walk(673, 422, eBlock,eWalkableAreas);cGob2.FaceDirection(eDirectionRight);
if (D06SecretaireDessin==0) { D06SecretaireDessin=1; D06Reportage=D06Reportage+1; }}} else {JSP(player.ActiveInventory);} }
Comprend pas ! |
| | | Clique Adepte de la Grande Tasse Bleue
Nombre de messages : 106
Date d'inscription : 11/05/2022
| Sujet: Re: Script d'utilisation automatisée d'objets Ven 29 Mar 2024 - 16:37 | |
| Je remet ton code identique, mais avec la bonne indentation pour clarifier : - Code:
-
function cSecret_UseInv() { if ((cGob1.ActiveInventory == iPerro)&&(D06G1In==1)) { if(D06EntreeTruculo==false) { cGob1.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob1.Walk(699, 410, eBlock,eWalkableAreas); cGob1.FaceDirection(eDirectionRight);
if (D06SecretaireInterview==0) { D06SecretaireInterview=1; D06Reportage=D06Reportage+1; } } } if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) { if(D06EntreeTruculo==false) { cGob2.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob2.Walk(673, 422, eBlock,eWalkableAreas); cGob2.FaceDirection(eDirectionRight);
if (D06SecretaireDessin==0) { D06SecretaireDessin=1; D06Reportage=D06Reportage+1; } } } else { JSP(player.ActiveInventory); } }
J'ai pas cherché dans le détail ce que ça fait, mais déjà sur le plan d'ensemble : - Tu test l'objet de Gob1 : si oui fait quelque chose - Tu test l'objet de Gob2 : si oui fait quelque chose - Si le test de Gob2 échoue : lance JSP (animation par défaut) Donc oui, dans le cas de gob1 ça fera les 2 anims, Puisque tu lance JSP uniquement quand le test sur Gob2 échoue. Ainsi : - Test Gob1 = oui -> lance l'anim - Test Gob2 = non -> lance JSP Je sais pas à quoi / comment fonctionnent Gob1 / Gob2 dans le jeu, donc pour moi c'est très abstrait.. Il y a plusieurs schéma possible pour résoudre ça. C'est du même ordre que ta précédente difficulté à bien saisir l'ordre d'exécution et le bon susage de "else" / "else if". J'espère que sur ce conseil, t'as bien saisi la structure de base, ici en 3 blocs. Sinon la solution que je te propose risque de t'embrouiller... Dans une fonction tu peux utiliser "return". Généralement ça sert pour récupérer le résultat d'une fonction, mais ça a un autre effet. Quand "return" est exécuté, ça interrompt la fonction. Si t'as rien d'autre à faire dans cSecret_UseInv() alors ça fera bien l'affaire. ça suivrait ce plan : - Tu test l'objet de Gob1 : si oui fait quelque chose / Return (stop) - Tu test l'objet de Gob2 : si oui fait quelque chose / Return (stop) - Lance JSP (animation par défaut) Là JSP est automatiquement lancé, sauf si un des blocs s'est déclenché auparavant et exécuté un Return. Voici ton code avec les return : - Code:
-
function cSecret_UseInv() { if ((cGob1.ActiveInventory == iPerro)&&(D06G1In==1)) { if(D06EntreeTruculo==false) { cGob1.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob1.Walk(699, 410, eBlock,eWalkableAreas); cGob1.FaceDirection(eDirectionRight);
if (D06SecretaireInterview==0) { D06SecretaireInterview=1; D06Reportage=D06Reportage+1; } } return; } if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) { if(D06EntreeTruculo==false) { cGob2.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob2.Walk(673, 422, eBlock,eWalkableAreas); cGob2.FaceDirection(eDirectionRight);
if (D06SecretaireDessin==0) { D06SecretaireDessin=1; D06Reportage=D06Reportage+1; } } return; } JSP(player.ActiveInventory); } C'est la solution qui me semble la plus simple à intégrer. Mais si t'as encore des difficultés à bien clarifier tes structures if / else if / else, bien définir le schéma et l'ordre des blocs... En ajoutant des "return" t'auras probablement des situations (erreur dans ton code) que tu auras du mal à diagnostiquer. Donc retiens bien que "return" interrompt le fil d'exécution de la fonction (sors de la fonction). Si t'as un truc dans ta fonction qui semble ne jamais pouvoir s'exécuter, regarde si t'as pas un bloc au-dessus qui contiens un "return" et qui n'est paut-être pas bien défini. Tu peux aussi passer les lignes "return" en commentaires le temps de débugguer, pour voir si c'est ça. Moi par exemple, il m'arrive de les déplacer dans le code de la fonction pour vérifier ligne par ligne ce qui fonctionne ou ne fonctionne pas. |
| | | Gob Adepte de la Grande Tasse Bleue
Nombre de messages : 123
Date d'inscription : 08/10/2021
| Sujet: Re: Script d'utilisation automatisée d'objets Ven 29 Mar 2024 - 18:34 | |
| Ok, ça marche avec return, je ne le mets que dans le premier cas, le second ça marche sans. CGob1 et cGob2 sont les players jouables. Quand on lance le else JSP, les cas cGob1 et cGob2 sont déjà réglés. Et ça marche dans le second cas, pas le premier, alors que la configuration est pareille. Tout cela n'est pas clair. Merci en tout cas. |
| | | Clique Adepte de la Grande Tasse Bleue
Nombre de messages : 106
Date d'inscription : 11/05/2022
| Sujet: Re: Script d'utilisation automatisée d'objets Sam 30 Mar 2024 - 7:30 | |
| - Gob a écrit:
- Ok, ça marche avec return, je ne le mets que dans le premier cas, le second ça marche sans.
Mets le quand même pour mettre les choses au propre : - if Gob1 -> return - if Gob2 -> return - else JSP() Pour que tu n'aies pas de problème plus tard, pour n'importe quelle raison (ajouter quelque chose dans cette fonction, la recopier comme modèle pour une autre, etc.) Même si pour l'instant elle semble fonctionner comme tu l'entends, dans les fait c'est pas exactement le cas. Et c'est pour ça que t'as eu ce problème, et que ça te semble pas clair. - Gob a écrit:
- Quand on lance le else JSP, les cas cGob1 et cGob2 sont déjà réglés. Et ça marche dans le second cas, pas le premier, alors que la configuration est pareille. Tout cela n'est pas clair. (..)
Non c'était pas configuré pareil. Les clauses if Gob1 et if Gob2 ne sont pas reliées. Le bloc else JSP n'a aucun lien avec if Gob1. Si tu le crois, alors c'est que l'erreur c'était que la clause if Gob2 doit être une clause else if Gob2Révise ce que j'avais expliqué ici : https://adventuregamestudio.1fr1.net/t3217p25-script-d-utilisation-automatisee-d-objets#48213Ainsi, sans ajouter de "return" la solution aurait été ceci : - Code:
-
function cSecret_UseInv() { if ((cGob1.ActiveInventory == iPerro)&&(D06G1In==1)) { if(D06EntreeTruculo==false) { cGob1.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob1.Walk(699, 410, eBlock,eWalkableAreas); cGob1.FaceDirection(eDirectionRight); if (D06SecretaireInterview==0) { D06SecretaireInterview=1; D06Reportage=D06Reportage+1; } } } else if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) { if(D06EntreeTruculo==false) { cGob2.FaceDirection(eDirectionDown); } if(D06EntreeTruculo==true) { cGob2.Walk(673, 422, eBlock,eWalkableAreas); cGob2.FaceDirection(eDirectionRight); if (D06SecretaireDessin==0) { D06SecretaireDessin=1; D06Reportage=D06Reportage+1; } } } else { JSP(player.ActiveInventory); } } Ligne 15 - Code:
-
if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) { Corrigée en - Code:
-
else if ((cGob2.ActiveInventory == iBloc)&&(D06G2In==1)) { Ainsi les 2 conditions (Gob1 et 2) sont reliées, et JSP exécutée par défaut à l’exception des deux autreset pas uniquement la dernière comme dans ton code d'origine. |
| | | Contenu sponsorisé
| Sujet: Re: Script d'utilisation automatisée d'objets | |
| |
| | | | Script d'utilisation automatisée d'objets | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |