A2 · Episode 2 · 4:52

Controlling Sprite Direction in Scratch

This episode teaches two methods to move and rotate a sprite using keyboard arrow keys in Scratch: a simple event-based approach and a more fluid method using indefinite loops with conditional key-press detection.

Source:Montagne Vincent / tube-numerique-educatif.apps.education.fr · License:CC BY 4.0

Transcript

  1. Coder un jeu avec Scratch, deuxième épisode dans lequel nous allons voir une

    Coding a game with Scratch—Episode 2, in which we’ll explore

  2. deuxième méthode pour déplacer un lutin avec les touches du clavier.

    a second method for moving a sprite using keyboard keys.

  3. Cette méthode sera beaucoup plus adaptée pour le déplacement d'un vaisseau spatial

    This method is much better suited for controlling a spaceship

  4. ou d'un bateau qui avance toujours droit devant eux,

    or a boat that always moves straight forward,

  5. mais qui s'oriente en tournant vers la gauche ou vers la droite dans la direction

    yet changes its direction by turning left or right

  6. dans laquelle ils veulent avancer.

    to face the direction it wants to move.

  7. Voilà, nous allons apprendre à coder ceci avec Scratch et nous y allons tout de

    Alright, we’ll learn how to code this in Scratch—

  8. suite. Alors nous voici maintenant avec Scratch.

    let’s get started right away! Here we are now in Scratch.

  9. Et donc pour faire avancer le bateau que j'ai ici droit devant lui et le faire

    To make this boat here move straight forward,

  10. tourner à droite et à gauche, dans le menu mouvement,

    and turn left or right,

  11. nous allons utiliser les trois premiers blocs.

    we’ll use the first three blocks in the ‘Motion’ menu.

  12. Le premier bloc" avancer" fait avancer le lutin droit devant lui.

    The first block—‘Move’—makes the sprite advance straight ahead in its current direction.

  13. Et ensuite nous avons les blocs" tourner à droite" et" tourner à gauche",

    Then we have the ‘Turn right’ and ‘Turn left’ blocks,

  14. ce sont les petites flèches qui nous indiquent le sens de la rotation,

    whose small arrow icons indicate the rotation direction,

  15. et on peut taper le nombre de degrés que l'on veut.

    and we can type in the number of degrees we want it to rotate.

  16. Alors comme dans la première vidéo, nous allons utiliser les événements,

    As in the first video, we’ll again use ‘Events’ blocks,

  17. à savoir quand une touche est pressée.

    specifically ‘When key pressed’.

  18. Alors par exemple quand la flèche haut est pressée,

    For example, when the up arrow key is pressed,

  19. nous allons faire avancer le bateau.

    we’ll make the boat move forward.

  20. Ensuite quand la flèche droite est

    When the right arrow key is pressed,

  21. pressée, nous allons le faire tourner vers la droite.

    we’ll make it turn right.

  22. Et quand la flèche gauche est pressée, nous le faisons tourner vers la gauche.

    When the left arrow key is pressed, we’ll make it turn left.

  23. Et là j'ai un script qui est très simple, qui permet de diriger mon bateau,

    Here I have a very simple script that lets me steer my boat:

  24. donc je l'oriente comme je souhaite, et ensuite je peux le faire avancer.

    I can first orient it as I wish, then make it move forward.

  25. Donc ça fonctionne.

    So—it works!

  26. Ici, il n'y a pas de problème de costume ou d'orientation comme on pouvait l'avoir

    Here, there’s no issue with costume or orientation,

  27. dans la première vidéo avec des déplacements horizontaux ou verticaux.

    unlike in the first video, where horizontal or vertical movement caused such issues.

  28. Donc ici, j'ai un script qui fonctionne,

    So here, I have a script that works,

  29. mais le mouvement n'est pas très fluide. Vous pouvez l'essayer,

    but the movement isn’t very smooth. You can try it yourself:

  30. je ne peux pas appuyer par exemple sur deux touches à la fois.

    I can’t press two keys at once, for example.

  31. La deuxième touche que j'appuie annule l'effet

    The second key I press

  32. de la première.

    cancels the effect of the first.

  33. Donc on va essayer une méthode qui est peut- être un petit peu plus compliquée,

    So we’ll try a method that may be slightly more complicated,

  34. mais qui permet d'avoir des mouvements plus fluides.

    but one that enables smoother movement.

  35. Alors je vais arrêter, enlever ceci, et

    I’ll stop now, remove this block,

  36. on va faire démarrer le script quand le drapeau vert est cliqué cette fois.

    and set the script to start when the green flag is clicked instead.

  37. Et nous allons utiliser un capteur.

    Next, we’ll use a sensor.

  38. Nous avons un capteur qui permet de tester si une touche du clavier a été

    We have a keyboard key-detection sensor,

  39. appuyée, pressée, c'est ici.

    which checks whether a key has been pressed—right here.

  40. Donc je peux avoir la flèche gauche ou la flèche droite, par exemple,

    For instance, I can select the left or right arrow key,

  41. ici. Donc ça c'est un test.

    placed right here. So this is a conditional test.

  42. Donc le test, pour l'utiliser, je dois aller dans le menu contrôle ici,

    To use this test, I need to go to the ‘Control’ menu,

  43. et je vais utiliser une boucle si alors.

    and choose the ‘if-then’ loop.

  44. Si la flèche droite est pressée,

    If the right arrow key is pressed,

  45. alors je vais tourner à droite de 15 degrés.

    then the sprite rotates 15 degrees to the right.

  46. Je vais faire pareil avec la flèche gauche, donc je vais dupliquer ça.

    I’ll do the same for the left arrow key, so I’ll duplicate this block.

  47. Si la flèche gauche est pressée,

    If the left arrow key is pressed,

  48. alors on va le faire tourner à gauche de 15 degrés. Et on va recommencer avec la

    then the sprite rotates 15 degrees to the left. Next, we’ll add the same logic for the up arrow key,

  49. flèche haute, et cette fois il faut le faire avancer de 10.

    and this time, make it move forward by 10 steps.

  50. Alors ici, j'ai plusieurs conditions, j'ai

    Here, I’ve set up several conditions,

  51. trois tests conditionnels.

    a total of three conditional tests.

  52. Si la flèche droite est pressée, on fait tourner le bateau vers la droite,

    If the right arrow key is pressed, the boat turns right,

  53. si c'est la flèche gauche qui est pressée, il tourne vers la gauche,

    if the left arrow key is pressed, it turns left,

  54. et si c'est la flèche haut, il avance de 10.

    and if the up arrow key is pressed, it moves forward by 10.

  55. Mais tout ceci doit se répéter pendant toute la durée du jeu.

    But all this must repeat continuously throughout the game.

  56. Donc si je le fais fonctionner comme ceci,

    So if I run it like this,

  57. si j'appuie sur le drapeau vert et que j'essaye d'appuyer sur les touches,

    click the green flag and then try pressing the arrow keys,

  58. il ne se passe rien.

    nothing happens.

  59. Parce que quand j'ai appuyé sur le drapeau vert, le script s'est lu une fois,

    Because when I clicked the green flag, the script ran only once,

  60. et quand j'ai appuyé sur le drapeau vert, aucune des flèches n'était pressée,

    and at that moment, none of the arrow keys were pressed,

  61. et donc il passe à la suite, il passe à la suite et il ne revient jamais.

    so it proceeds to the next step—and never comes back.

  62. Donc ici dans le menu contrôle, on va répéter indéfiniment.

    So in the Control menu, we’ll choose ‘forever’.

  63. Donc j'ai une boucle ici répéter indéfiniment,

    Now I have a ‘forever’ loop here,

  64. ce qui va me permettre de répéter ce script pendant toute la durée du jeu.

    which lets this script repeat continuously throughout the game.

  65. Et cette fois, si je clique sur le drapeau,

    And this time, when I click the green flag,

  66. j'ai quelque chose qui fonctionne et j'ai un mouvement qui est beaucoup plus fluide.

    something works—and the movement becomes much smoother.

  67. Ici, testez les deux scripts et vous verrez que cette.

    Test both scripts here, and you’ll see that this—

  68. Deuxième solution permet d'avoir des déplacements beaucoup plus fluides pour ce

    second solution gives much smoother movement for the boat.

  69. bateau. Alors on aurait pu faire le même principe exactement sur la première vidéo

    In fact, we could apply exactly the same approach to the first video,

  70. avec le mouvement latéral gauche, droite ou vertical

    such as lateral movement (left/right) or vertical movement (up/down),

  71. en haut, en bas.

    that is, moving up or down.

  72. On aurait pu faire exactement de la même façon un

    We could write a similar script:

  73. script qui permettait avec une boucle répétée indéfiniment et des tests

    using a ‘forever’ loop with conditional tests,

  74. conditionnels si les touches sont pressées.

    to check whether keys are pressed.

  75. Et aussi on aurait eu des mouvements plus fluides avec le lutin qui se déplace de

    This would also give smoother movement—up/down and left/right—for the sprite.

  76. haut en bas et de droite à gauche.

    The sprite’s movement—both vertically and horizontally—would be smoother.

  77. Voilà, ce script et cet épisode sont terminés.

    That's it—this script and this episode are now complete.

  78. Ne ratez pas le prochain épisode dans lequel nous verrons les scripts

    Don’t miss the next episode, where we’ll explore

  79. d'initialisation absolument indispensables pour bien commencer son jeu.

    the absolutely essential initialization scripts needed to get your game off to a great start.

  80. À bientôt.

    See you soon!