A2 · 第8集 · 6:40

Scratch游戏互动设计

本集讲解如何在Scratch中实现角色与背景之间的互动,包括碰撞检测、反弹逻辑和颜色触发机制。

来源:Montagne Vincent / tube-numerique-educatif.apps.education.fr · 许可:CC BY 4.0

字幕

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

    用Scratch编写游戏,第七集,我们将学习如何

  2. ajouter des interactions entre un lutin et l'arrière- plan.

    在角色和背景之间添加互动。

  3. L'arrière- plan, c'est le décor de notre jeu.

    背景,就是我们游戏的场景。

  4. Alors ici, par exemple, dans le jeu de pong,

    比如在这个乒乓球游戏中,

  5. la balle rebondit sur la raquette, ça c'est de l'interaction entre deux lutins,

    球会弹回球拍——这是两个角色之间的互动;

  6. mais elle rebondit également sur les bords de l'écran, en haut,

    但它也会从屏幕顶部、

  7. à gauche et à droite, ça c'est une interaction avec le décor,

    左侧和右侧边缘弹回——这是与场景的互动,

  8. c'est- à- dire avec l'arrière- plan,

    也就是与背景的互动;

  9. mais également la balle s'arrête lorsqu'elle touche la partie grise de l'arrière-

    此外,当球碰到背景中的灰色区域时,它就会停止——

  10. plan, donc nous avons ici une autre interaction.

    这又是一种互动。

  11. Donc c'est ce genre de choses que nous allons voir comment coder avec Scratch,

    因此,我们接下来将学习如何用Scratch编写这类功能,

  12. et nous y allons tout de suite.

    马上开始吧!

  13. Alors nous y voici, j'ai donc deux lutins, la balle et la raquette.

    好了,我们到了这里:我有两个角色——球和球拍。

  14. Donc la raquette, c'est juste un rectangle noir que j'ai dessiné avec les outils de

    球拍只是一个黑色矩形,

  15. dessin ici dans les costumes.

    我用这里的造型编辑工具绘制而成。

  16. Si je regarde son script, il est très simple, j'ai une initialisation,

    如果查看它的脚本,会发现非常简单:先进行初始化,

  17. je le mets à sa position initiale, donc x égal 0, y moins 80.

    把它放到初始位置,即x坐标为0,y坐标为-80。

  18. Et j'ai les déplacements avec les flèches du clavier vers la gauche ou vers la

    接着是键盘方向键控制的左右移动,

  19. droite. Donc on peut regarder ce que ça donne.

    我们来看看效果如何。

  20. Voilà, vers la gauche, vers la droite.

    看,向左,向右。

  21. Et on va donc s'intéresser au script de

    接下来,我们来关注球的脚本。

  22. la balle. Alors on va aussi avoir une initialisation,

    它同样包含一个初始化部分,

  23. on va la mettre par exemple par ici au départ.

    比如我们让它从这里开始运动。

  24. Donc je vais la faire aller. . .

    接下来,我要让它动起来……

  25. Alors vous voyez que quand je prends le bloc ici" aller à", les

    你看,当我选择“移到”这个积木时,

  26. coordonnées qui sont déjà affichées,

    显示的坐标值,

  27. ce sont celles que le lutin occupe actuellement.

    正是该角色当前所在的位置。

  28. Donc là, la balle, elle est actuellement à- 808, alors on va arrondir,

    所以现在,球的位置是-808,我们来取整。

  29. on va mettre 0, 110 par exemple.

    比如设为0.110。

  30. Voilà, et la balle va avancer droit devant elle,

    好了,球将笔直向前移动。

  31. donc on va l'orienter dans une direction

    因此,我们要给它设定一个方向。

  32. donnée. Alors pour commencer, on va l'orienter par exemple à 45 degrés.

    首先,比如设为45度。

  33. On verra après ce qu'on peut faire pour avoir quelque chose qui augmente la

    之后我们会看看,怎样逐步增加游戏难度。

  34. difficulté du jeu.

    ——游戏难度。

  35. Et maintenant, donc on va faire avancer de 10 la balle, et ça,

    现在,让球每次前进10个单位,而且要持续进行。

  36. on va le faire indéfiniment.

    ——持续进行。

  37. Tant que le jeu n'est pas fini, la balle doit avancer de 10.

    只要游戏未结束,球就必须一直前进10个单位。

  38. Et la première chose qu'on va faire,

    接下来,我们要做的第一件事是:

  39. c'est d'ajouter une interaction avec les bords du jeu.

    添加球与游戏边界的交互效果。

  40. Nous avons un bloc qui nous dit que la balle peut rebondir si le bord est atteint.

    我们有一个模块,能让球在碰到边界时反弹。

  41. Alors on peut tout de suite regarder ce que ça donne.

    那我们马上来看看效果如何。

  42. Voilà, si la balle atteint le bord, elle rebondit sur le bord.

    看,球一碰到边界,就会在边界上反弹。

  43. Alors pour le moment, je n'ai pas mis d'interaction avec la raquette,

    目前,我还没设置球与球拍的交互,

  44. donc elle passe à travers la raquette, c'est normal,

    所以它会直接穿过球拍——这很正常。

  45. mais je vois que la balle rebondit sur

    但我看到,球只要碰到任何边界,

  46. tous les bords qu'elle touche.

    就会立刻反弹。

  47. Alors on va rajouter tout de suite l'interaction avec la raquette.

    接下来,我们马上添加球与球拍的交互。

  48. Donc si. La raquette est touchée.

    如果球拍被碰到……

  49. Donc ici, je choisis si la raquette

    这里我选择:如果球拍被碰到,

  50. est touchée, alors la balle, elle doit rebondir.

    那么球就必须反弹。

  51. Alors il n'y a pas de bloc

    但注意,Scratch里没有现成的模块,

  52. qui nous permette de faire rebondir un lutin sur un autre lutin,

    能实现一个角色在碰到另一个角色时反弹;

  53. on peut rebondir seulement sur les bords.

    我们只能让它在碰到边界时反弹。

  54. Alors ici, il y a quelque chose d'un petit peu compliqué,

    这里的情况有点复杂,

  55. on va devoir orienter la balle dans une nouvelle direction, et en fait,

    我们需要让球朝一个新方向运动。实际上,

  56. on va avoir un angle qui est symétrique par rapport à la verticale,

    球的运动方向与竖直线呈对称角度,

  57. l'orientation de.

    即这个方向。

  58. de la balle, la nouvelle orientation.

    子弹,新的方向。

  59. Alors je vous donne le calcul ici, c'est 180 degrés

    那么我在这里给出计算:180度

  60. moins l'angle que faisait la balle, c'est- à- dire la direction ici.

    减去球的夹角,也就是此处的方向。

  61. Vous voyez le bloc direction tout en bas, que je peux prendre ici.

    您看到最底部的‘方向’模块,我可以在这里选择。

  62. Donc si la raquette est touchée,

    因此,如果球拍被击中,

  63. alors la balle va s'orienter à une nouvelle direction qui est 180 moins la direction

    那么球就会朝一个新方向运动,

  64. qu'elle avait auparavant.

    这个方向等于它原先方向的180度减去原先方向。

  65. Alors on peut essayer de voir ce que ça donne.

    那么我们可以试着看看效果如何。

  66. Voilà, donc là j'ai l'impression que la balle rebondit,

    好了,现在我觉得球在弹跳,

  67. enfin c'est pas une impression, la balle rebondit sur

    不,这不只是感觉,球确实在

  68. la raquette tout à fait correctement,

    球拍上完全正常地弹起,

  69. mais là elle peut passer derrière la raquette, c'est pas ce que je veux.

    但此刻它却能从球拍后方穿过,而这并非我想要的效果。

  70. Moi ce que je veux, c'est que si elle passe derrière la raquette,

    我想要的是,如果她从球拍后面过去,

  71. la partie s'arrête.

    这一局就结束。

  72. Alors ce qu'on va faire, c'est qu'on va rajouter une interaction avec la couleur

    接下来,我们要添加一个与灰色的交互效果。

  73. grise ici qui est derrière la raquette,

    这里的灰色位于球拍后方,

  74. qui est la couleur de l'arrière- plan gris. C'est pas un lutin ici,

    也就是背景的灰色。这里并没有角色精灵,

  75. c'est l'arrière- plan qui est gris.

    而是背景本身是灰色的。

  76. Donc on va avoir si.

    所以,我们将有……

  77. Et cette fois, le capteur qu'on va utiliser, c'est si la couleur. . .

    而这一次,我们将使用的传感器是颜色传感器。

  78. Alors vous voyez ici c'est couleur verte, mais je veux la couleur grise,

    您看,这里显示的是绿色,但我想要灰色。

  79. donc ce que je fais, c'est que je clique dans le carré là où il y a la couleur

    因此,我点击这个显示绿色的方块,

  80. verte, et je vais aller chercher la couleur grise sur l'écran.

    然后在屏幕上选择灰色。

  81. Voilà, et maintenant c'est la couleur grise.

    好了,现在是灰色。

  82. Donc si la couleur grise est touchée.

    所以,如果碰到了灰色,

  83. Le jeu doit s'arrêter, donc on va stopper tout le jeu.

    游戏就必须停止,因此我们要暂停整个游戏。

  84. Alors voyons voir ce que ça donne.

    我们来试试效果如何。

  85. Donc ici, je rattrape la balle, si je la rattrape pas, le jeu est arrêté.

    这里,我接住球;如果没接住,游戏就结束。

  86. Alors on peut rajouter un petit effet avant que le

    我们可以添加一个小小的特效,

  87. jeu soit arrêté.

    在游戏停止之前。

  88. On va rajouter un petit effet, donc on va répéter par exemple 20

    我们来加个特效:比如让球的颜色变化重复20次。

  89. fois un effet de couleur sur la balle.

    也就是对球施加20次颜色特效。

  90. Alors on peut choisir ce que l'on veut, c'est juste pour.

    我们可以自由选择效果内容,

  91. pour voir quelque chose, donc on va ajouter 5 par exemple,

    只是为了看到一些变化,

  92. 20 fois à l'effet couleur, on va voir ce que ça donne.

    比如加5次、20次颜色特效,看看效果。

  93. Donc faut pas hésiter, voilà, la balle change de couleur plusieurs fois,

    所以别犹豫——看,球多次变色,

  94. le jeu est terminé.

    游戏就结束了。

  95. Donc ici j'ai un jeu qui est déjà

    目前,我已经做出了一个可玩的游戏,

  96. jouable, on peut rajouter évidemment beaucoup de choses,

    当然还能添加很多功能,

  97. mais surtout ce qu'on peut rajouter c'est au départ que la balle s'oriente dans une

    但尤其可以添加的是:游戏开始时,

  98. direction aléatoire, parce que là en fait on a toujours le même angle au départ et

    让球朝一个随机方向运动,

  99. donc en fait on a toujours le même jeu.

    因为目前它每次都是以相同角度出发,所以游戏每次都一样。

  100. Donc ce qu'on va faire ici c'est qu'on va remplacer" s'orienter à 45 degrés",

    因此,我们要把‘面向45度方向’替换掉,

  101. on va générer un nombre aléatoire, donc ici je suis dans les opérateurs,

    改用生成一个随机数,

  102. nombre aléatoire, alors entre 1 et 10, on va changer ça,

    在运算模块里选‘随机数’,范围先设为1到10,再调整一下,

  103. sur Scratch les angles sont entre- 180 degrés et+ 180 degrés.

    Scratch中角度范围是-180度到+180度。

  104. Et là si je recommence la partie, plusieurs fois,

    现在,我重新开始几轮游戏,

  105. la balle à chaque fois part dans une direction différente,

    每次球都会朝不同方向出发,

  106. vous voyez si je recommence.

    您看,我再试一次。

  107. Voilà, donc là on a un jeu qui est opérationnel,

    好了,现在我们有了一个可运行的游戏。

  108. alors bien sûr on peut rajouter beaucoup de choses, le comptage des points,

    当然,我们还能添加很多功能,比如计分系统,

  109. etc, augmenter la difficulté, rajouter des bonus, etc, mais nous avons un jeu.

    等等;还能增加难度、添加奖励道具等等。但目前,我们已经拥有一个游戏了。

  110. qui est déjà opérationnel comme ceci.

    它现在就已经可以这样运行了。

  111. Voilà, le script est terminé.

    好了,脚本编写完成了。

  112. Cet épisode est terminé, ne manquez pas le prochain épisode dans lequel nous verrons

    本期节目到此结束,敬请期待下期节目,

  113. que les lutins peuvent communiquer entre eux.

    在下期中,我们将看到小精灵之间如何互相通信。

  114. À bientôt!

    我们很快再见!