[RESOLU] GUI - limite de valeur d'un Slider

En ce moment je regarde un peu comment utiliser les diverses fonctions de GDevelop pour la création d’interface et donc j’expérimente je me documente et je progresse mais voilà que je tombe sur un problème qui est peut être un peu basique mais je n’ai plus le recul nécessaire pour trouver la solution

j’ai fait une scène basique avec une gestion d’onglet ça pas de soucis c’est simple, ensuite j’ai ajouté des case à coché là encore pas de problème je me suis inspiré d’une solution donné sur le forum anglais en l’adaptant à mes besoins, puis pour aller plus loin je fait un slider parce que c’est le genre de truc qui est utile dans une GUI (pour par exemple pour le volume du son ou d’autres chose), pas de soucis ça fonctionne mais voilà le problème la valeur de position du slider est passé à un “text” ça marche mais je cherche comment bloquer la valeur texte du slider entre 0 et 290 dans mon test hors le slider se limite bien grâce à des événement mais la valeur écrite elle se se bloque pas entre 0 et 290 tant que l’on ne relâche pas la souris, ce qui esthétiquement pas top top alors est-ce que quelqu’un à une idée sur l’erreur que je fait ou sur comment procéder pour que la valeur passé à l’objet text (ValeurSlider) n’affiche pas des valeur de moins de 0 ou de plus de 290…

pour voir le soucis ouvrez le projet lancer l’apercu cliquer sur le bouton B pour ouvrir l’onglet B puis faite glisser le slider au de la des limites vous verrez que le texte “valeur:” indique des valeurs hors limite


mon projet de test :
dropbox.com/s/qi39gu14tpq62 … nu.7z?dl=0
les images et le projet sont dans le fichier .7z

et mes évènements

Je répond à mon post mais je n’ai pas encore trouvé de solution satisfaisante, voilà j’ai tester plusieurs solution la première consiste à bloquer la souris entre les limite du slider :

la souris se stop bien dans les limite mais uniquement visuellement car on peux toujours forcer et avoir des valeurs négative

ensuite j’ai essayer de mettre la limite au niveau du contenu de l’objet “text” ainsi :

et là je n’obtient plus de valeur négative ou au de la de 290 mais ça ne fonctionne pas correctement si la souris va trop vite on ne peux pas atteindre 0 ou 290 le minimum du slider devient aléatoire entre 5 et 11 et le maximum également bref ça ne fonctionne pas…

enfin troisième solution que j’ai tester consiste à mettre à jour le texte qui indique la valeur du slider que l’orsque le slider ne se déplace plus en faisant ainsi :

et là ça fonctionne bien mais par contre on perd la possibilité de voir à combien on déplace le slider vu que la valeur de position ne s’affiche que lorsque l’on relâche la souris par contre les limite sont respecté…

est-ce que quelqu’un aurait une autre solution pour avoir la valeur du slider dynamique et toujours comprise entre les limite du slider ici entre 0 et 290

Perso j’utiliserais une correspondance pour que la valeur changeante aille de 0 à 100%, car dans le cas de volume ou autre ça sera toujours le cas, après suivant la largeur de ton slide, tu peux définir des palier si tu ne veux par exemple que 10 valeurs possibles de 0 à 100 (en allant de 10 en 10).

La solution de bloquer la souris en effet te bloquera le curseur visuellement pas la valeur de ce que tu affiches qui s’actualisera en dessus/dessous des limites.

En gros (je dis ne gros pour essayer de te donner une idée mais je n’utilise pas ces extensions là), je ferais un curseur de 300 pixels, ce qui ferait qu’un déplacement de 3px équivaudrait à 1%, de là avec des conditions, à la limite tu te fiche que ta valeur descente à -325 par exemple à gauche, parce que si la coordonnée x de ton curseur est <=0 tu fixera la va leur à 0%.

Avec quelques conditions et une boucle je pense que ça peut etre plié, mais je pense qu’il faut que tu commence par convertir la largeur en % ou en valeurs de 0 à 10, ça sera plus simple et plus flexible de travailler avec des valeurs “relatives” qu’avec des valeurs absolues sur l’axe.

J’ai pas bcp de temps mais vu que le sujet m’intéresse (j’aurai à faire le même genre de curseur dans un avenir proche), je regarderai dès que possible si tu n’as pas trouvé d’astuce, quit à ce qu’on en fasse un exemple officiel de GD.

Oui bien sur que les valeurs ne resterons pas 0 et 290 un pourcentage est plus utile, en fait je pensai faire de 0 à 300 et diviser par 3 la valeur (c’est ce que tu explique également ), mais ça ce n’est pas un soucis, ce qui me gêne le plus c’est de l’ordre de l’esthétique et du pratique, le blocage du curseur du “slide” ne bloque pas la valeur qu’il envoi tant que le clic de la souris est maintenu, à la base je m’était dit vu que slide.X() renvoi la position X de l’image et que l’image ne vas pas en dehors des limites ça passera bien mais en fait slide.X() renvoi en fait la position X de la souris qui déplace l’image et donc l’image est bien bloquée mais slide.X() ne l’est pas tant que l’on relâche pas la souris et c’est ce qui me gêne, ce n’est pas grand chose puisque lorsque l’ont relâche la souris tout rentre dans l’ordre mais au niveau de la finition sur un travail d’interface c’est gênant, cela n’empêche pas la GUI de fonctionner correctement, ce que j’ai fait fonctionne bien c’est utilisable sans bug, mais ce serait un plus si l’objet “text” n’affichais pas des valeurs hors limite c’est pourquoi je cherche une solution simple, élégante et fonctionnelle :slight_smile:

Justement, passé par un pourcentage avant affichage (et plutot afficher le pourcentage à la place de la valeur absolue) peut régler le problème. Peu importe après que slide.X() soit à -6135, tu affichera 0% pour toutes les valeurs de .X() inférieures ou égales à 0.

Je trouve ça plus logique de commencer par scripter le pourcentage, comme ça derriere peu importe après que tu utilise un slide de 100px de large, de 300 ou 1000px de large.

je dois visiblement m’y prendre mal :confused:
je suis parti sur cela :

donc la valeur slide.X() contient la position x je luis retire les 315 pixels afin d’avoir une valeur qui débute à 0 puis je la divise par 3 (imaginons que le slider fait 300px et non pas 290px) donc j’obtiens une valeur entre 0 et 100, j’arrondi la valeur avec round pour retirer la virgule mais tout cela ne bloque pas la valeur à 0 tant que la souris n’est pas relâcher la valeur peux aller dans les négatif que ce soit des % ou pas et le problème ne change pas ou alors j’ai louper un truc dans la manipulation des expression (ce qui est fort possible)

pour voir le problème en vidéo :
youtube.com/watch?v=vO1_KH9wXNk

les cases à cocher fonctionnent bien, les onglets fonctionne bien le slider fonctionne bien mais je ne parviens pas à limiter cette satanée valeur tout en la gardant dynamique :laughing:

J’ai trouvé une solution qui fonctionne comme je souhaite :mrgreen:

j’ajoute deux actions qui viennent supplanter la modification du texte quand on force le slider hors limite, c’était tout bête j’avais la solution sous les yeux :blush: