Discuss Scratch
- Discussion Forums
- » Français
- » Méthode bourrine ---> méthode optimisée
- link-potter
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
J'ai encore un problème avec mon nouveau projet, en faite c'est pas vraiment un problème mais c'est un script qui risque par la suite d'être assez embêtant…
Ce script est dans le lutin “jump” qui fait toute la gravité du projet, le système de cette gravité ne me cause pas de problème et je trouve même que le système que j'ai fait marche à la perfection.
C'est juste la manière que j'ai dût utiliser pour vérifier à chaque fois si il est ou non sur une plateforme qui est pas terrible et c'est pour vous demandez si vous n'avez pas un meilleur script à me proposer.
Le projet: https://scratch.mit.edu/projects/257141347/
Merci d'avance
Ce script est dans le lutin “jump” qui fait toute la gravité du projet, le système de cette gravité ne me cause pas de problème et je trouve même que le système que j'ai fait marche à la perfection.
C'est juste la manière que j'ai dût utiliser pour vérifier à chaque fois si il est ou non sur une plateforme qui est pas terrible et c'est pour vous demandez si vous n'avez pas un meilleur script à me proposer.
Le projet: https://scratch.mit.edu/projects/257141347/
Merci d'avance
Last edited by link-potter (Nov. 18, 2018 12:33:58)
- Dairop
- Scratcher
100+ posts
Méthode bourrine ---> méthode optimisée
Déjà je remarque que tu t'es beaucoup amélioré, gg
Et sinon j'ai pris du temps à comprendre comment tu as codé le test, on a plein de tests imbriqués avec des listes du nom de “là”, c'est pas très clair ^^
En fait, tu teste toutes les plateformes existantes dans 1 seul test c'est ça ? Si oui, tu peux faire plus simplement (pour relire et créer des plateformes à l'infini).
Ici, je vais tout tester par plateforme, avec la même méthode que toi mais en un peu plus joli:
Et sinon j'ai pris du temps à comprendre comment tu as codé le test, on a plein de tests imbriqués avec des listes du nom de “là”, c'est pas très clair ^^
En fait, tu teste toutes les plateformes existantes dans 1 seul test c'est ça ? Si oui, tu peux faire plus simplement (pour relire et créer des plateformes à l'infini).
Ici, je vais tout tester par plateforme, avec la même méthode que toi mais en un peu plus joli:
mettre [test v] à [0]Et à la fin de ta boucle, si test=1 alors le perso touche une plateforme ^^ J'espère ne pas avoir fait de petites erreurs, mais par contre change moi directement le nom des variables et listes xd
mettre [n° v] à (1)
répéter (nombre de plateformes) fois
si <<<(ordonnée) = (élément (n°) de [là v] :: list)> et <(élément ((n°) + (2)) de [là v] :: list) > (abscisse)>> et <(élément ((n°) + (1)) de [là v] :: list) < (abscisse)>> alors
mettre [test v] à (1)
ajouter à [n° v] (3)
end
end
Last edited by Dairop (Nov. 18, 2018 21:04:28)
- link-potter
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
Merci^^ et donc ce programme est dans un bloc sans rafraichissement d'écran, non ?
En tout je change toute suite mon code
Et pour les noms des listes j'avais pas trop d'inspi…
Edit: tu as fait une petite erreur, on doit mettre la variable n° à -2 au début
Re-édit: je n'arrive pas à le faire fonctionner, j'ai essayer plein de choses mais aucune n'a marché…
En tout je change toute suite mon code
Et pour les noms des listes j'avais pas trop d'inspi…
Edit: tu as fait une petite erreur, on doit mettre la variable n° à -2 au début
Re-édit: je n'arrive pas à le faire fonctionner, j'ai essayer plein de choses mais aucune n'a marché…
Last edited by link-potter (Nov. 18, 2018 18:08:36)
- link-potter
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
Après de très nombreux essais je n'ai toujours pas réussi à faire fonctionner ton script…
- Dairop
- Scratcher
100+ posts
Méthode bourrine ---> méthode optimisée
Mon script ne doit pas être bon, mais le principe y est:
D'après ce que j'ai compris, chaque plateforme est codée en éléments:
Y
X1
X2
Et X2 > X1, c'est ça ?
Si oui, je peux continuer:
On va tester pour chaque plateforme si elle touche le joueur, mais d'une méthode un peu différente à la tienne mais pas trop:
On met le compteur (n°) à 1
Et la variable test à 0
à chaque fois que la boucle se répète, on va tester si la plateforme sélectionnée est en collision avec le joueur.
Pour ça, on va Prendre l'élément n° de la liste (n° vaut pour l'instant 1 et la valeur de l'élément 1 de la liste est la position Y de la plateforme), l'élement (n°+1) de la liste (qui équivaut à la valeur X1) et l'élément (n°+2) de la liste (qui vaut X2).
Une fois ces valeurs trouvées, on va faire ton test comme si on avait une seule plateforme.
Si la plateforme touche le joueur, on met la variable “test” à 1, sinon on y touche pas.
Une fois que toutes les plateformes ont étés testées, si la variable “test” = 1, le joueur touche une plateforme.
Si tu comprend ça, tu pourras faire ton script toi même (ou sinon je suis juste nul pour expliquer et c'est un peu vrai xd)
J'avais fait ça un peu à la va-vite plus haut, j'ai corrigé le script, il devrait mieux marcher mtn ^^
D'après ce que j'ai compris, chaque plateforme est codée en éléments:
Y
X1
X2
Et X2 > X1, c'est ça ?
Si oui, je peux continuer:
On va tester pour chaque plateforme si elle touche le joueur, mais d'une méthode un peu différente à la tienne mais pas trop:
On met le compteur (n°) à 1
Et la variable test à 0
à chaque fois que la boucle se répète, on va tester si la plateforme sélectionnée est en collision avec le joueur.
Pour ça, on va Prendre l'élément n° de la liste (n° vaut pour l'instant 1 et la valeur de l'élément 1 de la liste est la position Y de la plateforme), l'élement (n°+1) de la liste (qui équivaut à la valeur X1) et l'élément (n°+2) de la liste (qui vaut X2).
Une fois ces valeurs trouvées, on va faire ton test comme si on avait une seule plateforme.
Si la plateforme touche le joueur, on met la variable “test” à 1, sinon on y touche pas.
Une fois que toutes les plateformes ont étés testées, si la variable “test” = 1, le joueur touche une plateforme.
Si tu comprend ça, tu pourras faire ton script toi même (ou sinon je suis juste nul pour expliquer et c'est un peu vrai xd)
J'avais fait ça un peu à la va-vite plus haut, j'ai corrigé le script, il devrait mieux marcher mtn ^^
- SBissay
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
On peut même encore un peu optimiser :
(en pseudo code, la flemme de faire des scratch blocks)
mettre numéro à 1
mettre test à 0
répéter jusqu'à ((numéro > nombre plateformes) ou (test = 1)
si non (x joueur < x1 de la plateforme numéro) // sinon on ne la touche pas et on arrête là
si non (x joueur > x2 de la plateforme numéro) //sinon on ne la touche pas et on arête là (bis)
si y joueur = y plateforme
mettre test à 1
fin si
fin si
fin si
fin répéter
Du coup, on élimine des test inutiles dès que les x ne sont pas bons, et on arrête dès qu'on a trouvé une plateforme qu'on touche.
(en pseudo code, la flemme de faire des scratch blocks)
mettre numéro à 1
mettre test à 0
répéter jusqu'à ((numéro > nombre plateformes) ou (test = 1)
si non (x joueur < x1 de la plateforme numéro) // sinon on ne la touche pas et on arrête là
si non (x joueur > x2 de la plateforme numéro) //sinon on ne la touche pas et on arête là (bis)
si y joueur = y plateforme
mettre test à 1
fin si
fin si
fin si
fin répéter
Du coup, on élimine des test inutiles dès que les x ne sont pas bons, et on arrête dès qu'on a trouvé une plateforme qu'on touche.
- link-potter
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
@Dairop t'inquiète j'avais compris ton script^^ et d'ailleurs je ne vois toujours pas où y'avait le problème
@SBissay cette après-midi j'essaie avec ton script en espérant qui ai pas un problème autre part qui interfère avec le script…
@SBissay cette après-midi j'essaie avec ton script en espérant qui ai pas un problème autre part qui interfère avec le script…
- iropDa
- Scratcher
26 posts
Méthode bourrine ---> méthode optimisée
Oui, ça fait moins de calculs c'est vrai mais la flemme aussi de refaire des scratch-blocs xd C'est d’ailleurs la méthode que j'utilise pour mes jeux avec des collisions seulement verticales ou horizontales
- link-potter
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
J'ai une bonne et une mauvaise nouvelle…
La bonne: c'est bon il détecte quand il est sur une plateforme.
La mauvaise: le système ne marche pas sans rafraichissement d'écran.
Donc avec rafraichissement d'écran il descend tout doucement…
Je n'ai trouvé aucune explication à ce problème alors si vous, vous en avez trouvé une, dites la moi^^
La bonne: c'est bon il détecte quand il est sur une plateforme.
La mauvaise: le système ne marche pas sans rafraichissement d'écran.
Donc avec rafraichissement d'écran il descend tout doucement…
Je n'ai trouvé aucune explication à ce problème alors si vous, vous en avez trouvé une, dites la moi^^
- link-potter
- Scratcher
500+ posts
Méthode bourrine ---> méthode optimisée
J'ai enfin résolu le problème!
youpi
Le problème ne venait pas de ce script mais de celui qui exécute ce script, je n'ai pas vraiment compris pourquoi ça ne marchais pas mais maintenant il marche
Edit: depuis quand on peut clore directement un sujet ?
youpi
Le problème ne venait pas de ce script mais de celui qui exécute ce script, je n'ai pas vraiment compris pourquoi ça ne marchais pas mais maintenant il marche
Edit: depuis quand on peut clore directement un sujet ?
Last edited by link-potter (Nov. 25, 2018 19:02:51)
- Discussion Forums
- » Français
- » Méthode bourrine ---> méthode optimisée