Discuss Scratch

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

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:
mettre [test v] à [0]
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
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

Last edited by Dairop (Nov. 18, 2018 21:04:28)


((pen projects :: #ff0000) (3D :: #ff4000) (games :: #ff8000) (visualizer :: #ffbf00) (and others :: #ffff00) :: #000000)









Dairop
Scratcher
100+ posts

Méthode bourrine ---> méthode optimisée

Oups le bloc est coupé En gros j'ai juste testé le x et le y de chaque plateforme ^^

((pen projects :: #ff0000) (3D :: #ff4000) (games :: #ff8000) (visualizer :: #ffbf00) (and others :: #ffff00) :: #000000)









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é…

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 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 (+1) de la liste (qui équivaut à la valeur X1) et l'élément (+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 ^^


((pen projects :: #ff0000) (3D :: #ff4000) (games :: #ff8000) (visualizer :: #ffbf00) (and others :: #ffff00) :: #000000)









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.

Generative art :              Pivot  :               Sudoku :
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…
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^^
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 ?

Last edited by link-potter (Nov. 25, 2018 19:02:51)

Powered by DjangoBB