Source: Scratch Wiki en français
Ce tutoriel traite de comment réaliser un bloc permettant de créer des boutons 100% stylo avec des clones.
Idée
Dans un projet n'utilisant que du stylo, comment faire pour réaliser des boutons interactifs ?
Le bloc estampiller
ne pouvant pas être utilisé selon la communauté pour ces projets, il faut donc utiliser un générateur de bouton.
Limitations
Comme indiqué plus haut, le générateur de bouton fonctionnera avec des clones. Il ne pourra pas y avoir plus de 300 boutons en même temps (si votre projet ne génère aucun clone) sur Scratch. Vous pouvez cependant utiliser Turbowarp et sa fonction clones infinis pour réaliser plus de boutons, mais le projet ne serait alors pas fonctionnel sur Scratch.
Réalisation (Ajouter un bouton)
Tout d'abord, il va falloir créer un lot de variables POUR CE SPRITE SEULEMENT.
Créer les variables
clone : y supérieur::variables ring
clone : y inférieur::variables ring
clone : x droit::variables ring
clone : x gauche::variables ring
clone : bordure ?::variables ring
clone : bordure : épaisseur::variables ring
clone : bordure : couleur::variables ring
clone : bouton : couleur::variables ring
clone : bouton : couleur si touché par la souris::variables ring
clone : bouton : précision::variables ring
clone : identifiant::variables ring
clone : icône dédiée::variables ring
clone : survolé ?::variables ring
Listes
clone : boutons à supprimer::list ring
Réalisation
Ensuite, il vous faudra définir un long bloc personalisé qui suit :
définir Bouton (identifiant), position sup x:(gauche x) y:(haut y) inf x:(droite x) y:(bas y) <bordure ?> (couleur bordure) (épaisseur bordure), bouton (couleur) (précision) (couleur si survolé), avec icône (icône) mettre [clone : y supérieur v] à (haut y) mettre [clone : y inférieur v] à (bas y) mettre [clone : x gauche v] à (gauche x) mettre [clone : x droit v] à (droite x) si <(clone : y inférieur) > (clone : y supérieur)> alors { mettre [clone : identifiant v] à (clone : y supérieur) mettre [clone : y supérieur v] à (clone : y inférieur) mettre [clone : y inférieur v] à (clone : identifiant) }::control // inverser l'axe y si les valeurs sont inversées si <(clone : x droit) < (clone : x gauche)> alors { mettre [clone : identifiant v] à (clone : x droit) mettre [clone : x droit v] à (clone : x gauche) mettre [clone : x gauche v] à (clone : identifiant) }::control // inverser l'axe x si les valeurs sont inversées mettre [clone : bordure ? v] à <bordure ?> mettre [clone : bordure : épaisseur v] à (épaisseur bordure) mettre [clone : bordure : couleur v] à (couleur bordure) mettre [clone : bouton : couleur v] à (couleur) mettre [clone : bouton : couleur si touché par la souris v] à (couleur si survolé) mettre [clone : bouton : précision v] à (précision) mettre [clone : icône dédiée v] à (icône) mettre [clone : identifiant v] à (identifiant) // définissez un identifiant différent pour tous vos boutons si <[boutons à supprimer v] contient (identifiant)> alors { répéter jusqu'à ce que <non <[boutons à supprimer v] contient (identifiant)>> { supprimer l'élément (position de (identifiant) dans [boutons à supprimer v]) de [boutons à supprimer v] }@loopArrow::control }::control // si le bouton existait déjà par le passé, sa suppression n'affectera pas le nouveau bouton créer un clone de (moi même v)
La suite du code se déroule dans deux blocs Quand je commence comme un clone
On a sous le premier :
Quand je commence comme un clone répéter jusqu'à ce que <[boutons à supprimer v] contient (clone : identifiant v)> { dessiner bouton::custom }@loopArrow::control supprimer l'élément (position de (clone : identifiant) dans [boutons à supprimer v]) de [boutons à supprimer v] supprimer ce clone
On a sous le second :
Quand je commence comme un clone répéter jusqu'à ce que <[boutons à supprimer v] contient (clone : identifiant v)> { si <<(clone : y supérieur) > ((souris y) - (clone : bordure : épaisseur))> et <(clone : y inférieur) < ((souris y) + (clone : bordure : épaisseur))>>alors { si et <<(clone : x droit) > ((souris x) - (clone : bordure : épaisseur))> et <(clone : x gauche) < ((souris x) + (clone : bordure : épaisseur))>> alors { mettre [clone : survolé ? v] à [true] si <souris pressée> alors { exécuter la fonction (clone : identifiant)::custom }::control } sinon { mettre [clone : survolé ? v] à [false] }::control } sinon { mettre [clone : survolé ? v] à [false] }::control }@loopArrow::control
Libre à vous de gérer les fonctions pouvant être exécutées.
On a sous définir dessiner bouton
:
définir dessiner bouton mettre la taille du stylo à (précision) si <(clone : survolé ?) = [true]> alors { mettre la couleur du stylo à (clone : bouton : couleur) } sinon { mettre la couleur du stylo à (clone : bouton : couleur si touché par la souris) }::control aller à x:(clone : x gauche) y:(clone : y supérieur) répéter ((([plafond v] de (((clone : y supérieur) - (clone : y inférieur)) / (précision))) * (précision)) / (2)) fois { stylo en position d'écriture répéter (1) fois { aller à x:(clone : x gauche) y:(ordonnée y) aller à x:(clone : x droit) y:(ordonnée y) ajouter ((0) - (précision)) à y aller à x:(clone : x gauche) y:(ordonnée y) ajouter (précision) à y }@loopArrow::control relever le stylo ajouter ((-2) * (précision)) à y }@loopArrow::control // fond du bouton si <(clone : bordure ?) = [true]> alors { mettre la taille du stylo à (clone : bordure : épaisseur) mettre la couleur du stylo à (clone : bordure : couleur) aller à x:(clone : x gauche) y:(clone : y supérieur) stylo en position d'écriture aller à x:(clone : x droit) y:(clone : y supérieur) aller à x:(clone : x droit) y:(clone : y inférieur) aller à x:(clone : x gauche) y:(clone : y inférieur) aller à x:(clone : x gauche) y:(clone : y supérieur) relever le stylo }::control // bordure aller à x:(((clone : x gauche) + (clone : xx droit)) / (2)) y:(((clone : y supérieur) + (clone : y inférieur)) / (2)) // centre du bouton tracer icône (clone : icône dédiée)::custom
Créer des Îcones
Il ne vous reste qu'à créer des icônes pour vos boutons. En voici quelques unes :
définir tracer icône (icône) si <(icône) = [valider]> alors { mettre la couleur du stylo à [#008858] mettre la taille du stylo à (4) ajouter (-4) à x s'orienter à (-45) avancer de (4) pas stylo en position d'écriture avancer de (-8) pas s'orienter à (45) avancer de (12) pas relever le stylo } sinon { si <(icône) = [recommencer]> alors { mettre la couleur du stylo à [#d20000] mettre la taille du stylo à (4) ajouter (6) à y s'orienter à (90) stylo en position d'écriture répéter (26) fois { avancer de (1) pas tourner @turnRight de (10) degrés }@loopArrow::control avancer de (4) pas tourner @turnLeft de (215) degrés avancer de (4) pas avancer de (-4) pas tourner @turnRight de (90) degrés avancer de (4) pas relever le stylo } sinon { si <(icône) = [flèche bas]> alors { mettre la couleur du stylo à [#000000] mettre la taille du stylo à (2) ajouter (-3) à y stylo en position d'écriture s'orienter à (45) avancer de (6) pas avancer de (-6) pas s'orienter à (-45) avancer de (6) pas relever le stylo } sinon { si <(icône) = [flèche haut]> alors { mettre la couleur du stylo à [#000000] mettre la taille du stylo à (2) ajouter (-3) à y stylo en position d'écriture s'orienter à (-135) avancer de (6) pas avancer de (-6) pas s'orienter à (135) avancer de (6) pas relever le stylo } sinon { si <(icône) = [petit carré]> alors { mettre la taille du stylo à (8) mettre la couleur du stylo à [#009e69] ajouter (-4) à x ajouter (4) à y stylo en position d'écriture ajouter (8) à x ajouter (-8) à y ajouter (-8) à x ajouter (8) à y relever le stylo } sinon { }::control }::control }::control }::control }::control
Sentez-vous libre d'ajouter et de combinez des icônes pour en réaliser de nouvelles, ou de changer les couleurs. Les icônes seront centrées au milieu du bouton.
C'est bon ! Vous pouvez désormais ajouter des boutons !
Supprimer un bouton
Il vous suffit d'ajouter un élément étant l'identifiant du bouton visé pour supprimer un bouton.