| Demande d'aide sur le chronometre | |
|
|
|
Auteur | Message |
---|
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Demande d'aide sur le chronometre Mer 29 Avr 2020 - 9:28 | |
| Bonjour, j’espère sur le bon onglet pour une demande d'aide.
Voila j'ai bien parcouru tout le forum qui est bien complet mais j'ai pas trouvé de réponse à mon problème. Quand la valeur Y est supérieur à 2 j'aimerai afficher un chronomètre "temps" en minute. Tant que Y est supérieur à 2 il s'incrémente et quand Y est inférieur à 3 le chrono s’arrête mais affiche sa dernière valeur. Et si Y repasse de nouveau supérieur à 2 le chrono repart et continue à tourner.
Pour mon jeu : j'ai un plongeur sous marin qui tant qu'il est en surface il ne se passe rien et quand il plonge, à partir de 3 mètres, l'ordinateur affiche la profondeur et le temps de plongée. Pour la profondeur c'est ok ça fonctionne sur le jeu. pour le chrono c'est la question.
Pourquoi la profondeur et le temps ? c'est ces valeurs qui permettent de calculer s'il faut faire des palier de décompressions. D'ailleurs par la suite lorsque le joueur va se balader au fond de la mer, au bout d'un certain temps le jeu va demander au joueur "Y a t-il des paliers a faire ?" suivant sa réponse on continue ou on lui donne plus d'explication. Bonne journée |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Mer 29 Avr 2020 - 17:46 | |
| - Otholite a écrit:
- Bonjour, j’espère sur le bon onglet pour une demande d'aide.
En fait la section questions/réponses est plus adaptée, mais pas de souci je vais déplacer le sujet. - Otholite a écrit:
- Quand la valeur Y est supérieur à 2 j'aimerai afficher un chronomètre "temps" en minute. Tant que Y est supérieur à 2 il s'incrémente et quand Y est inférieur à 3 le chrono s’arrête mais affiche sa dernière valeur. Et si Y repasse de nouveau supérieur à 2 le chrono repart et continue à tourner.
Je comprends pas très bien parce que tel que tu le décris, si Y = 2 alors le chrono doit à la fois s'incrémenter et s'arrêter ce qui est contradictoire. Est-ce que ce que tu veux faire c'est déclencher le chrono à partir de 2, et l'arrêter si Y passe > 3 puis redescend sous cette valeur ? Autre question, quand tu parles de chrono en minutes, tu veux afficher les minutes et les secondes où uniquement les minutes ? _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Mer 29 Avr 2020 - 22:52 | |
| Merci pour la réponse, j'utilise Y comme coordonnée verticale qui pour mon exemple commence a 0 (la surface) jusqu’à 65 (le bas) en mètre. en fait j'ai pris la coordonnée y que j'ai divisé par 7 pour représenter la valeur en mètre. Sur le dessin, l'ordinateur de droite (celui de gauche est un essai doublon), indique la profondeur et le temps de plongée. Le temps de plongée commence a compter dès que le plongeur passe 3 mètres jusqu’à son retour à 3 m. Suivant la profondeur et le temps que l'on passe a cette profondeur il faut calculer s'il faut faire des palier de décompression. (voir table MN90 sur internet pour + d'info). Donc pour Y>2 (et non=2) le chrono de met en marche, en minutes pour simplifier, jusqu’à son retour ou il s’arrête à Y<3 et le chrono à la fin de la plongée garde la dernière valeur en fixe. Plus tard j'ajouterai un bouton pour réinitialiser l'ordinateur. Idéalement le chrono s'incrémente de 1 toutes le 1 à 2 secondes car une plongée réelle dure 1h00 environ et je vais pas faire attendre 1h00 le joueur devant son clavier. Le temps de plongée de 1h00 doit être représenté en 1 à 2 minutes dans le jeu. Ci joint une copy d'écran du jeu et un réel profil de plongée. |
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Mer 29 Avr 2020 - 22:58 | |
| Re, en retournant sur le forum mes images n'apparaissent pas alors qu'en prévisualisation ca marche, j'ai transféré les image via Servimg (proposé dans l'onglet "héberger une image" bizarre ! |
|
| |
Shai-la Ouvrière en Chef de la Grande Tasse Bleue
Nombre de messages : 6018
Age : 46
Localisation : Montpellier
Date d'inscription : 17/04/2006
| Sujet: Re: Demande d'aide sur le chronometre Jeu 30 Avr 2020 - 7:58 | |
| J'ai le même souci, je ne sais pas ce qui se passe avec le forum :-/ |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Jeu 30 Avr 2020 - 16:42 | |
| - Otholite a écrit:
- Re, en retournant sur le forum mes images n'apparaissent pas alors qu'en prévisualisation ca marche, j'ai transféré les image via Servimg (proposé dans l'onglet "héberger une image" bizarre !
- Shai-la a écrit:
- J'ai le même souci, je ne sais pas ce qui se passe avec le forum :-/
En effet ça bug un peu en ce moment. Les pages mettent très longtemps à charger, mais chez moi les images finissent par s'afficher. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
Dernière édition par valoulef le Jeu 30 Avr 2020 - 17:20, édité 1 fois |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Jeu 30 Avr 2020 - 17:15 | |
| Bon je ne sais pas exactement comment est pensé ton code (il me faudrait une copie du passage) mais pour simplifier je vais tout faire dans le repeatedly_execute en considérant Y comme une variable globale (déclarée en haut du script ou dans l'onglet Global variables). Pour rappel, le repeatedly_execute est une fonction exécutée environ 40 fois par secondes (par défaut), et qui permet donc de faire des vérifications en permanence. La durée sera affichée dans un label nommé "LabelMinutes" avec comme texte défini par défaut "Temps écoulé : 0 min". Tu pourras adapter tout ça à ta convenance. On commence donc par déclarer les variables en haut du global_script : - Code:
-
// main global script file int Y; int TempsEcoule; La variable "TempsEcoule" servira de tampon pour calculer ensuite le nombre de minutes. Ensuite : - Code:
-
function repeatedly_execute() { int Minutes = TempsEcoule/40; //1 min = 1 seconde. Pour 2 secondes, diviser par 80, etc. if (Y < 3) TempsEcoule = 0; //Si on est à moins de 3m de la surface), on réinitialise le compteur tampon. if (Y >= 3) { //Si on est à 3m ou plus on met à jour l'affichage des minutes... LabelMinutes.Text = String.Format("Temps écoulé : %d min", Minutes); //...et on incrémente le compteur : TempsEcoule++; } } Ainsi le compteur affiché se déclenchera quand on franchit les 3m vers le bas, s'arrêtera quand on franchit à nouveau les 3m dans l'autre sens, puis se réinitialisera et se déclenchera à nouveau quand on franchira une nouvelle fois ce seuil dans l'autre sens. N'hésite pas si jamais tu as besoin de plus d'explications. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Ven 1 Mai 2020 - 8:15 | |
| Bonjour, j'ai essayé le script, j'ai entré les variables ensuite les lignes de code dans la function repeatedly_execute() que j'avais deja créé pour afficher la coordonnée Y. ci dessous les lignes de codes avec une erreur au "LabelMinutes" qui est undefined token lors du run. J'ai ignoré ton repeatedly_execute() car ca bloque quand les 2 sont activées. - Code:
-
// Affichage Y dans GUI LabelCoordY function repeatedly_execute() { String CoordonneeY = String.Format("%d",(player.y-152)/6); // Label2.Text=CoordonneeY; //affichage sur ordi de gauche Label1.Text=CoordonneeY; //affichage sur ordi de droite => ca marche bien // } // function repeatedly_execute() { int Minutes = TempsEcoule/40; //1 min = 1 seconde. Pour 2 secondes, diviser par 80, etc. if (Y < 3) TempsEcoule = 0; //Si on est à moins de 3m de la surface), on réinitialise le compteur tampon. if (Y >= 3) //Si on est à 3m ou plus on met à jour l'affichage des minutes. LabelMinutes.Text = String.Format("Temps écoulé : %d min", Minutes); // Undefined token 'LabelMinutes' // Label3.Text = String.Format("%d", Minutes); // essai comme pour la coordonnee Y //...et on incrémente le compteur : TempsEcoule++; } } Je donne aussi une copy d'ecran du GUI Bonne journée
Dernière édition par Kitai le Ven 1 Mai 2020 - 17:02, édité 1 fois (Raison : balisage du code) |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: Demande d'aide sur le chronometre Ven 1 Mai 2020 - 17:05 | |
| Je me suis permis d'éditer ton message pour que ton code soit mis en forme et donc plus facile à lire Est-ce que tu as créé un élément de type Label dans un de tes GUI, auquel tu as donné le nom LabelMinutes ? (même question à propos de Label1, mais si tu as pas de message d'erreur à propos de Label1 c'est probablement qu'un tel élément existe déjà dans ton projet) Le code que @valoulef a donné suppose que tu l'adapteras à ton propre projet. _________________ 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 ! |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Ven 1 Mai 2020 - 20:27 | |
| - Kitai a écrit:
Le code que @valoulef a donné suppose que tu l'adapteras à ton propre projet. Oui pardon j'aurais peut-être du être plus clair là-dessus. En l'occurrence il faut que tu remplace "LabelMinutes" par "Label3" (si j'en juge par ton screen), et que tu adaptes le texte. En l'occurrence... - Code:
-
Label3.Text = String.Format("%d min", Minutes); ...devrait pouvoir faire l'affaire. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Dim 3 Mai 2020 - 7:26 | |
| Bonjour, merci de vos réponses, quand je cré un label, AGS le nome automatiquement label1, label2, label3, etc, bon ça me dérange pas plus que ça. j'avais aussi essayé avec label3 après les lignes "if" ça marche pas non plus j'ai rajouté un label2 (ordinateur de gauche) AVANT les lignes "if" bonne nouvelle le compteur affiche "0 min" tout le temps, en supprimant les "if" il marche bien mais il démarre au début du jeu et s’arrête quand on le quitte, normal. Ensuite j'ai fais plusieurs essais en supprimant 1 ou 2 if, en modifiant le paramètre Y, le label2 (ordi de droite) ne marche pas, en fait il marche que quand je supprime les 2 "if" normal il se retrouve juste après le label3. Ci dessous 2 copy d'écran, le 1er avec les "if" le second sans les "if". Ça coince juste sur la commande des "if". Kitai comment tu as fait pour éditer les lignes de code pour que ce soit plus lisible ? Bonne journée. |
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Dim 3 Mai 2020 - 7:41 | |
| J'y connais pas plus que ça en programmation mais ne faut-il pas, quelque part, donner une valeur à Y ? Style Y = la coordonnée de Y ou mieux, Y = la valeur de la profondeur ? |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Dim 3 Mai 2020 - 19:26 | |
| Tu peux changer le nom de ton Label dans ses propriétés, ici (image) : - Otholite a écrit:
- J'y connais pas plus que ça en programmation mais ne faut-il pas, quelque part, donner une valeur à Y ? Style Y = la coordonnée de Y ou mieux, Y = la valeur de la profondeur ?
Ah oui bien sûr, je partais du principe que tu avais déjà une variable Y dont tu définissais la valeur quelque part. Quand tu crées la variable en haut du script, tu ne fais que dire à AGS "je crée une variable qui sera un entier et qui s'appelle 'Y'". Après c'est à toi de manipuler cette variable, sinon elle rester à 0. C'est pour ça que quand tu supprime les "if" le chrono démarre, car cette action n'est plus conditionnée à la valeur de Y. Pour que la valeur de Y corresponde à ce que tu veux, tu peux remplacer les lignes suivantes : - Code:
-
String CoordonneeY = String.Format("%d",(player.y-152)/6); // Label2.Text=CoordonneeY; //affichage sur ordi de gauche Label1.Text=CoordonneeY; //affichage sur ordi de droite => ca marche bien par : - Code:
-
Y = (player.y-152)/6; Label1.Text = String.Format("%d", Y); Ainsi tu définis la valeur de Y comme tu le souhaite, il n'y a plus qu'à retourner cette valeur (convertie en String) dans le Label1 comme c'est le cas dans cet exemple. - Otholite a écrit:
Kitai comment tu as fait pour éditer les lignes de code pour que ce soit plus lisible ?
Comme ça (image) : Note : dans ton code, les accolades ligne 195 et 203 n'ont aucune utilité. Les accolades ne servent qu'à délimiter le code contenu pour les commandes if, while, for, ou les fonctions. Tu trouveras pas mal d'informations intéressantes sur tout ça ici : http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php?id=mots-cles _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Lun 4 Mai 2020 - 12:15 | |
| Ça marche super bien, merci. Je continue à programmer (a mon niveau) et je te tiendrai au courant de l’évolution voire, envoyer la séquence du jeu que j'ai créé sur le forum mais je sais pas comment faire pour l'envoyer. bonne journée |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Lun 4 Mai 2020 - 17:43 | |
| - Otholite a écrit:
- mais je sais pas comment faire pour l'envoyer. bonne journée
Il faut que tu stocke le contenu du dossier "Compiled" de ton projet dans un dossier compressé (.zip, ou dans une archive .rar) puis que tu l'upload via Dropbox ou un autre hébergeur gratuit... Puis que tu postes le lien de téléchargement. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Dim 10 Mai 2020 - 13:51 | |
| De retour avec 2 questions encore tordues : 1 : Comment afficher la profondeur max ( a droite de l'ordi) ? le but c'est qu'il garde la profondeur max affichée, même si l'on remonte. 2 : J'ai réussi a intégrer la consommation d'air, proportionnellement à la profondeur et faire diminuer la pression de la bouteille dans le temps (indicateur sur le manomètre). mon souci, a peu près le même que la prof max, c'est que quand je remonte la bouteille reviens à sa pression d'origine. Le but c'est que la pression diminue au fil du temps et de la profondeur mais sa valeur ne dois pas remonter. L'ordi de gauche est présent juste pour faire des essais, ne pas en tenir compte. Ci joint une copy d'écran, et merci pour vos aides. Quand le jeu sera plus avancé je le mettrai en téléchargement pour avoir vos avis. bonne journée |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Dim 10 Mai 2020 - 19:26 | |
| Pour ta première question c'est simple : Là tu calque ta variable ProfMax sur Y, donc forcément elle fluctue en fonction de Y, quelque soit son évolution. Si tu veux que ce soit uniquement la valeur maximale de Y, alors il faut copier sa valeur uniquement lorsque Y dépasse ProfMax : - Code:
-
if (Y > ProfMax) ProfMax = Y Pour ton problème de conso, il faudrait plutôt noter la consommation du cycle en cours en prenant la pression absolue divisée par 40 (car il y a 40 cycles en une minute dans ton cas), et l'additionner à une variable que tu aurais déclarée en haut du global_script. Tu vois l'idée ? Idem pour ton calcul de la quantité d'air restant dans la bouteille, vu que le code s'exécute à chaque cycle, il faudrait plutôt retirer la quantité d'air consommé au cours du cycle, et non la quantité globale. Essaye de copier le code que tu veux nous montrer dans des balises comme je t'ai montré ici, c'est plus simple quand on veut faire des copies (d'ailleurs je suis toujours intéressé pour que tu copie la partie de ton code sur le calcul de la consommation). _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Lun 11 Mai 2020 - 6:45 | |
| Super pour la ProfMax, ça a marché du premier coup tu est un chef. Pourtant j'ai cherché longtemps avant de poser la question. Pour la 2eme question, je te donne des infos sur le fonctionnement : J'ai une bouteille de plongée de 12 L que je gonfle à 230 bar ce qui me donne 12x230=2760 litres d'air de dispo. Un adulte consomme 15 L d'air/minute à la surface ou la pression = 1 bar (pression atmosphérique). Si j'utilise la bouteille qu'en surface j'ai une autonomie de 2760/15=184 min, 3h environ. Quand on plonge on rajoute 1 bar de pression tous les 10 m(poids de l'eau/ cm2) par ex à 30m on a 4 bar de pression ( 1atmo+3 d'eau). Et je consomme 4xplus d'air de 15L/m je passe à 60L/m. Mon autonomie est de 2760/60=46 min. Plus je descends plus je consomme. Le manomètre affiche au début de la plongée 230 bar, quand je plonge, le mano doit descendre proportionnellement avec la conso. Avec tes conseils, je vais d'abord rechercher une solution, que le proposerai sur le forum. Encore une question : "int" n'est valable que pour les nombres entier ? que faut il utiliser pour des nombres avec 1 ou 2 décimales ? car par ex ma conso à 14 m est de 15x1,4 et ça j'ai pas réussi à le faire, AGS calcul avec 1 ou 2 mais pas 1,4. j'ai du biaiser en multipliant tout par 10 (pour avoir des nombres entier) et diviser le résultat final/10. Bonne journée, sous la pluie pour ma région. |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Lun 11 Mai 2020 - 15:37 | |
| - Otholite a écrit:
- Avec tes conseils, je vais d'abord rechercher une solution, que le proposerai sur le forum.
Bonne démarche ! Mais n'hésite pas à redemander si tu continues à buter. - Otholite a écrit:
- Encore une question : "int" n'est valable que pour les nombres entier ? que faut il utiliser pour des nombres avec 1 ou 2 décimales ?
Il faut utiliser le mot clé float pour une valeur décimale. Cette page te sera très utile pour ce genre de choses. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Mar 12 Mai 2020 - 9:32 | |
| - Code:
-
// Calcul de la pression/mano et consommation d'air PressBout = 230; // Pression bouteille gonflee int Min = TempsEcoule/20; // Raffraichissement toute les 30 sec YY = ((player.y-152)/6)*100; // donner, a la variable YY, la prof en milibar. Pa = 1000+YY; // Pa = Pression absolue en mb + YY Label1.Text = String.Format("%d mb", Pa); //profondeur en milibar affichee sur ordi de gauche int Conso = (15*Pa)/1000; // Conso d'air en surface 15 l/min x Pa et/1000 pour l'avoir en L/min Label3.Text = String.Format("%d L/m", Conso); // Conso sur ordi de gauche en L/min PressB = PressBout-(Conso/24)*Min; // Pression restante sur le mano en bar, conso/24 car TempsEcoule/20 Press.Text = String.Format("%d", PressB); // Pression sur le manometre en bar
Avec plaisir pour encore un coup de main. Très utile le lien de "cette page". pour l'instant je vais rester simple avec des "int". J'ai tout calculé en milibar comma ça pas de virgule. Pour le manomètre ça se calcule bien mais 2 points que je ne comprend pas : 1) je descend a 4 mètres la conso en L/min et la pression en mb s'affichent bien sur l'ordi de gauche mais le mano "PressB" reste affiché a 230. En meme temps, intérieurement il fait son calcul car des que je descend en dessous de 5 m le mano se met à jour en soustrayant la conso faite à 4 mètres. Ex : je reste 15 min à 4 mètres j'ai consommé (15L/mx1,4 bar x 15 min)=315 litre d'air le mano devrait afficher 204 mais il affiche 230, je passe la barre des 5 m, j'arrive à 6 m et la le mano affiche 204 et continue correctement son décompte. 2) Je reste un certains temps a 30m la mano continue son décompte et quand je remonte, le mano au lieu de continuer à décompter il remonte son chiffre. De retour en surface il passe de nouveau à 230, l'idéal c'est qu'il garde sa dernière valeur. J’espère que les lignes de code se sont bien affichées comme tu as demandé. Bonne journée |
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Mar 12 Mai 2020 - 23:08 | |
| Il faut que tu raisonne comme le programme. Rappel : ces lignes de codes sont exécutées 40 fois par seconde (= 40 cycles). Les variables que tu déclare à l'intérieur du repeatedly_execute seront réinitialisées à chaque cycle. Maintenant, tu peux anticiper les valeurs en calculant à chaque fois pour une situation donnée. Imaginons une première situation où 10 secondes (réelles) se sont écoulées et où ton personnage est à la coordonnée y 800, tu peux faire les calculs comme le programme les ferait, de haut en bas : PressBout = 230 int Min = 400/20 = 20 (10 secondes = 400 cycles) YY = ((800 - 152)/6)*100 = 10 800Pa = 1000 + 10 800 = 11 800Label1.Text = "11800 mb" (ce qui sera affiché sur ton ordi de gauche) int Conso = (15*11 800)/1000 = 177Label3.Text = "177 L/m" (ce qui sera affiché sur ton ordi de gauche aussi) PressB = 230 - (177/24)*20 = 82 (on a dit plus haut que PressBout = 230 Conso = 177 et Min = 20. On arrondit le résultat à l'entier inférieur) Press.Text = "147"Tes labels affichent donc respectivement "11800 mb", "177 L/m" et "147".Maintenant, tu remontes. Disons que tu te retrouves à la coordonnée Y 200, et qu'il s'est écoulé 10 secondes de plus (soit 20 secondes en tout) : PressBout = 230int Min = 800/20 = 40YY = ((200 - 152)/6)*100 = 800Pa = 1000 + 800 = 1800Label1.Text = "1800 mb"int Conso = (15*1800)/1000 = 27Label3.Text = "27 L/m"PressB = 230 - (27/24)*40 = 185Press.Text = "185"On voit bien ici que le mano est passé de 147 à 185 alors qu'il aurait du descendre. Pourquoi ? Parce que tu calcules sa valeur en tenant compte uniquement de la consommation du cycle en cours. En fait c'est un peu comme si tu faisais tes courses et que tu voulais calculer l'argent qui te reste. Tu pars avec 100 €. Tu achète un article à 10 €, un à 80 € puis un à 2 euro. Et là pour calculer ce qui te reste tu regardes uniquement le prix du dernier article acheté (2 euros) le nombre d'articles achetés (3) et tu multiplie les deux, et tu en déduis que tu n'as dépensé que 6 euros et qu'il t'en reste 94 Il vaut donc mieux calculer la consommation totale au fur et à mesure dans une variable dédiée. Variable que tu dois déclarer en haut de ton global_script, à l'instar de ta variable "Y" (si j'ai bonne mémoire). Comme ça : - Code:
-
// main global script file int ConsoTotale; Ensuite tu édites ton code comme suit, en ajoutant une ligne et en modifiant le mode de caclcul de "PressB" : - Code:
-
int Conso = (15*Pa)/1000; // Conso d'air en surface 15 l/min x Pa et/1000 pour l'avoir en L/min ConsoTotale = ConsoTotale + (Conso/20) ; //Divisé par 20 car une minute = 20 cycles Label3.Text = String.Format("%d L/m", Conso); // Conso sur ordi de gauche en L/min PressB = PressBout-ConsoTotale; // Pression restante sur le mano en bar Press.Text = String.Format("%d", PressB); // Pression sur le manometre en bar J'espère que ça correspondra au résultat que tu recherche, j'ai essayé de pas trop m'embrouiller mais ma compréhension de ton problème a un peu évolué en rédigeant mon message. Ça peut vraiment aider de faire les calculs à la main en partant de valeurs hypothétiques pour arriver à comprendre d'où vient un bug. J'espère ne pas t'avoir embrouillé plus qu'autre chose. - Otholite a écrit:
J’espère que les lignes de code se sont bien affichées comme tu as demandé. C'est parfait ! _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Mer 13 Mai 2020 - 20:27 | |
| Tes explications m'ont vraiment bien aidée, je me suis inspiré de ton code, et je l'ai modifié pour avoir des valeurs avec des décimales car c’était pas top en int, j'ai remplacé certains int par des float. J'ai mis un bon moment pour comprendre qu'il fallait aussi remplacer des %d par des %f !!! Je te redonne les codes pour avoir ton avis si c'est correct, qu'il n'y a pas d'erreur ou de doublon. Sinon tout marche très bien sauf, (désolé) qu'en début de plongée en surface (voir copy d'écran) le mano affiche 0 alors qu'il devrait afficher 230 et la variable temps affiche "temps" au lieu de 0. Dès que je passe la barre des 1 mètre tout s'affiche dans l'ordre. Ne pas tenir compte de l'ordi de gauche, il sera supprimé, à l'avenir il ne restera que le mano et l'ordi de droite. - Code:
-
int Y; int TempsEcoule; int ProfMax; // float PressB; float Pa; float PressBout; float YY; float ConsoTotale;
- Code:
-
function repeatedly_execute() { String CoordonneeY = String.Format("%d m",(player.y-152)/6); Prof.Text=CoordonneeY; //affichage sur new ordi de droite => ca marche bien // Affichage du temps en minute int Minutes = TempsEcoule/40; //1 min = 1 seconde. Pour 2 secondes, diviser par 80, etc. Y = (player.y-152)/6; // donner a la variable Y la prof. if (Y < 1) TempsEcoule = 0; //Si on est à moins de 1m de la surface), on réinitialise le compteur tampon. if (Y >= 1) //Si on est à 1m ou plus on met à jour l'affichage des minutes. Temps.Text = String.Format("%d min", Minutes); // Affichage tps sur new ordi de droite. //...et on incrémente le compteur : TempsEcoule++; // garder affichage de la prof max. if (Y > ProfMax)ProfMax = Y; Pmax.Text = String.Format("%d m", ProfMax); // Calcul de la pression/mano et consommation d'air PressBout = 230.0; // Pression bouteille gonflee YY = IntToFloat (Y)/10.0; // 10 metres = 1 bar d'ou diviser Y/10.0 Pa = 1.0+YY; // Pa = Pression absolue en Bar + YY // rep forum float Conso = 0.375*Pa; // Conso d'air 15 l/min (en surface) x Pa. 15 L/m / 40 cycles pour 1 calcul par cycle = 0.375 ConsoTotale = ConsoTotale + (Conso/12.0); //conso/12 pour avoir sa valeur en bar/min Label1.Text = String.Format("%f b", ConsoTotale); //conso totale sur ordi de gauche Label3.Text = String.Format("%f L/m", Conso); // Conso instantanée en L/min sur ordi de gauche if (Y < 1) ConsoTotale = 0.0; //Si on est à moins de 1m de la surface), on réinitialise le compteur tampon. if (Y >= 1) //Si on est à 1m ou plus on met à jour l'affichage des minutes. PressB = PressBout-ConsoTotale; // Pression restante sur le mano en bar Press.Text = String.Format("%f", PressB); // Pression sur le manometre en bar
}
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Jeu 14 Mai 2020 - 18:25 | |
| C'est normal parce que dans ton code tu conditionne l'affichage de tes Labels au fait que la variable "Y" soit supérieure ou égale à 1. Attention ici : - Code:
-
if (Y >= 1) //Si on est à 1m ou plus on met à jour l'affichage des minutes. Temps.Text = String.Format("%d min", Minutes); // Affichage tps sur new ordi de droite. //...et on incrémente le compteur : TempsEcoule++; Dans ce passage, seule la ligne Temps.Text = String.Format("%d min", Minutes); est conditionnée au "if" qui précède. Si tu veux que la ligne suivante le soit aussi, il faut mettre des accolades. Mais de toute façon dans ton cas tu peux tout simplement enlever la mise à jour du Label de la condition, genre : - Code:
-
Temps.Text = String.Format("%d min", Minutes); if (Y >= 1) TempsEcoule++; Comme ça quand Y < 1 ton label "Temps" devrait afficher "0" (sinon tu peux aussi tout simplement écrire "0" comme texte du label dans ses paramètres. Pour le mano, tu peux tout simplement retirer la condition pour la mise à jour de "PressB" non ? Et si tu veux que rien ne soit consommé tant qu'on a pas plongé, alors c'est le calcul de la Conso (ou de Pa ?) qu'il faut conditionner à "Y". En tout cas tant que tu n'attribue aucune valeur pour Y < 1, alors elle restera à zéro au début. _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Otholite C'est quoi la Tasse Bleue ?
Nombre de messages : 18
Date d'inscription : 22/04/2020
| Sujet: Re: Demande d'aide sur le chronometre Ven 15 Mai 2020 - 11:30 | |
| Effectivement quand on place les lignes dans le bon ordre tout va bien. Grace à tes conseils les lignes de codes sont terminées ci dessous le résultat fini. - Code:
-
// Affichage Y dans GUI LabelCoordY function repeatedly_execute() { String CoordonneeY = String.Format("%d m",(player.y-152)/6); Prof.Text=CoordonneeY; //affichage sur new ordi de droite => ca marche bien // Affichage du temps en minute int Minutes = TempsEcoule/40; //1 min = 1 seconde. Pour 2 secondes, diviser par 80, etc. Y = (player.y-152)/6; // donner a la variable Y la prof. Temps.Text = String.Format("%d min", Minutes); if (Y >= 1) TempsEcoule++; // garder affichage de la prof max. if (Y > ProfMax)ProfMax = Y; Pmax.Text = String.Format("%d m", ProfMax); // Calcul de la pression/mano avec la consommation d'air PressBout = 230.0; // Pression bouteille gonflee YY = IntToFloat (Y)/10.0; // 10 metres = 1 bar d'ou diviser Y/10.0 Pa = 1.0+YY; // Pa = Pression absolue en Bar + YY float Conso = (0.25*Pa)/12.0; // Conso d'air 10 l/min (en surface) x Pa. 10 L/m / 40 cycles pour 1 calcul par cycle = 0.250 if (Pa < 1.1) Conso = 0.0; // Le mano de decompte pas et garde sa derniere valeur quand on remonte ConsoTotale = ConsoTotale + Conso; //conso/12 pour avoir sa valeur en bar/min PressB = PressBout-ConsoTotale; // Pression restante sur le mano en bar Press.Text = String.Format("%f", PressB); // Pression sur le manometre en bar // Conso en L/m sur le parchemin float ConsoLm = (Conso)*480.0; // 40 cycles x 12 int ConsLmE = FloatToInt (ConsoLm); Label3.Text = String.Format("%d L/m", ConsLmE);// Conso instantanée en L/min sur le parchemin //Label1.Text = String.Format("%f b", Pa); //conso totale sur ordi de gauche
|
|
| |
valoulef Délégué de la tasse bleue
Nombre de messages : 1791
Age : 35
Localisation : Condate
Date d'inscription : 01/08/2011
| Sujet: Re: Demande d'aide sur le chronometre Ven 15 Mai 2020 - 11:38 | |
| Bravo ! _________________ Vous êtes déjà allés à Condate ? Ils ont un petit vin qui à un goût de pierre à catapulte. C'est Toutatis en culotte de velours si j'ose m'exprimer ainsi.
|
|
| |
Contenu sponsorisé
| Sujet: Re: Demande d'aide sur le chronometre | |
| |
|
| |
| Demande d'aide sur le chronometre | |
|