Source: Scratch Wiki en français
De nombreux projets nécessitent l'implémentation d'une classe « Point ». Ce tutoriel vous propose d'implémenter une pseudo-classe grâce à des blocs personnalisés et une liste.
Définition de classe
Commençons par créer la pseudo-classe à l'aide de blocs personnalisés (sans rafraîchissement d'écran).
Effaceur
Ce script permet d'effacer une instance de point précédemment créée.
définir Points | ! Effacer \[nom] (nom) si <(nom) = []> alors supprimer tous les éléments de la liste [Points v] stop [ce script v] fin mettre [point / id / a v] à (position de (regrouper [id:] et (nom)) dans [Points v]) // sans espace si <(point / id / a) > [0]> alors répéter [5] fois supprimer l'élément (point / id / a) de [Points v] fin fin
Constructeur
Le script suivant permet de créer des « instances » de la classe Point, c'est à dire un objet virtuel représentant un Point.
définir Points | ! Instance \[nom] (nom) \[x, y] (x) (y) \[couleur] (clr) si <non <[Points v] contient (regrouper [id:] et (nom))>> alors ajouter (regrouper [id:] et (nom)) à [Points v]:: list ajouter (nom) à [Points v]:: list ajouter [x] à [Points v]:: list ajouter [y] à [Points v]:: list ajouter (clr) à [Points v]:: list fin mettre [point / id / a v] à (position de (regrouper [id:] et (nom)) dans [Points v]) remplacer l'élément ((point / id / a) + [2]) de la liste [Ponts v] par (x) remplacer l'élément ((point / id / a) + [3]) de la liste [Ponts v] par (y)
Méthodes
Aller à un point
Permet de déplacer le sprite aux coordonnées du point.
définir Points | Aller à \[nom] (nom) alors mettre [point / id / a v] à (position de (regrouper [id:] et (nom)) dans [Points v]) si <(point / id / a) > [0]> alors aller à x:(élément ((point / id / a) + [2]) de [Points v]) y:(élément ((point / id / a) + [3]) de [Points v]) fin
Tracer un point
Affiche un rendu basique d'un point (nécessite l'extension stylo).
définir Points | Tracer \[nom] (nom) Points | Aller à \[nom] (nom) :: custom si <(point / id / a) > [0]> alors mettre la taille du stylo à [8] mettre la couleur du stylo à (regrouper [#] et (élément ((point / id / a) + [4]) de [Points v]) stylo en position d'écriture relever le stylo mettre la taille du stylo à [6] mettre la couleur du stylo à [#eeeeee] // Hexadécimal “#eeeeee” stylo en position d'écriture relever le stylo fin
Créer un point à partir d'un mélange de points
Créé un nouveau point à partir d'un mélange entre deux points.
définir Points | Créer Point \[nom] (nom) à partir de \[2x\[nom]] (p1) (p2) \[%] (pourcent) mettre [point / id / a v] à (position de (regrouper [id:] et (p1)) dans [Points v]) mettre [point / id / b v] à (position de (regrouper [id:] et (p2)) dans [Points v]) si <<(point / id / a) > [0]> et <(point / id / b) > [0]>> alors mettre [point / m/ x v] à ((élément ((point / id / b) + [2]) de [Points v]) * ((pourcent) / [100])) ajouter ((élément ((point / id / a) + [2]) de [Points v]) * ([1] - ((pourcent) / [100]))) à [point / m/ x v] mettre [point / m/ y v] à ((élément ((point / id / b) + [3]) de [Points v]) * ((pourcent) / [100])) ajouter ((élément ((point / id / a) + [3]) de [Points v]) * ([1] - ((pourcent) / [100]))) à [point / m/ y v] Points | ! Instance \[nom] (nom) \[x, y] (point / m/ x) (point / m/ y) \[couleur] (000000)::custom fin
(pourcent::custom)
appartient à [0 ; 100], le point appartiendra même au segment entre ses deux points parents, avec deux cas particuliers :
- si
(pourcent::custom)
=0
, le point sera créé sur(p1::custom)
; - si
(pourcent::custom)
=100
, le point sera créé sur(p2::custom)
.