A2 · 第4集 · 5:45

自动追踪角色

本集学习用Scratch编程让一个角色(如老鼠)自动朝另一个角色(如猫)移动并追踪。

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

字幕

  1. Coder un jeu avec Scratch, quatrième épisode,

    用Scratch编程制作游戏,第四集,

  2. dans lequel nous allons voir comment programmer un lutin pour qu'il se déplace

    我们将学习如何编程控制一个角色

  3. automatiquement vers un autre lutin.

    自动朝另一个角色移动。

  4. Par exemple ici, dans le jeu du chat et la souris,

    例如,在这个‘猫抓老鼠’游戏中,

  5. la souris se déplace automatiquement vers le chat.

    老鼠会自动朝猫移动。

  6. Le chat est joué par le joueur, mais la souris est jouée par l'ordinateur.

    猫由玩家操控,而老鼠则由电脑控制。

  7. Et dans le jeu à côté, le vaisseau spatial s'oriente automatiquement vers la

    在旁边这个游戏里,飞船会自动转向

  8. sorcière sur laquelle il doit tirer.

    它需要射击的女巫。

  9. Voilà, donc c'est ce que nous allons apprendre à coder avec Scratch,

    好了,这就是我们今天要用Scratch学习编写的程序,

  10. et nous y allons tout de suite.

    现在就开始吧!

  11. Alors nous y voici.

    好了,我们到了。

  12. Donc je reprends le jeu du chat et de la souris,

    我继续使用‘猫和老鼠’这个游戏,

  13. j'ai donc le petit chat qui se dirige avec les flèches du clavier,

    小猫目前能用键盘方向键控制,

  14. avec le script que nous avons écrit dans le premier épisode,

    脚本是我们第一集编写的,

  15. et je veux que la souris se dirige toute seule vers le chat pour essayer de le

    现在我希望老鼠能自动朝猫移动,

  16. croquer. Alors j'ai déjà un script d'initialisation ici,

    试图把它吃掉。这里我已经写好了一个初始化脚本,

  17. quand je clique sur le drapeau vert,

    点击绿旗时运行,

  18. je réduis la taille de la souris à 75% de sa taille initiale,

    我把老鼠大小设为原始尺寸的75%,

  19. parce que je trouvais qu'elle était trop.

    因为之前我觉得它太大了。

  20. sans ça. Je l'envoie aux coordonnées- 200 145,

    没有这一步的话,我会把它移到坐标(-200, 145),

  21. ce qui correspond au coin en haut à gauche de l'écran.

    也就是屏幕左上角的位置。

  22. Je la fais s'orienter vers la droite pour ne pas qu'elle tourne le dos à l'écran,

    我让它面朝右,避免背对屏幕,

  23. et je la montre parce que à la fin du jeu, j'ai un script qui cache les lutins.

    并显示出来——因为游戏结束时有个脚本会隐藏所有角色。

  24. Donc c'est ce que je vais faire.

    所以我就这么做。

  25. Donc ici, si je clique sur le drapeau vert, voilà,

    点击绿旗后,看,

  26. la souris est allée se mettre en place, je peux diriger le lutin,

    老鼠就移动到指定位置了,我可以操控猫的角色,

  27. et je veux maintenant écrire quelque chose qui me permette d'orienter la souris vers

    接下来我要编写一段代码,让老鼠始终朝向猫,

  28. le chat. Alors pour cela, on va déjà commencer un nouveau script,

    首先,我们新建一个脚本:

  29. donc quand le drapeau vert est cliqué,

    当点击绿旗时,

  30. nous avons un bloc dans les mouvements qui s'appelle" s'orienter vers",

    运动模块中有一个叫‘面向…’的积木,

  31. et on peut s'orienter vers le pointeur de la souris ou vers un lutin.

    可以面向鼠标指针,也可以面向某个角色。

  32. Je vais orienter la souris

    我要让鼠标指向

  33. vers le lutin du petit chat.

    小猫角色。

  34. Alors si je clique sur le drapeau vert, je

    那么,如果我点击绿色旗帜,我

  35. vois que les lutins sont mis en position initiale et la souris s'est orientée vers

    会看到所有角色都回到初始位置,而且鼠标已转向

  36. le chat effectivement, mais si je bouge le chat, il ne se passe rien,

    小猫——确实如此;但如果我移动小猫,却什么也不会发生,

  37. parce que le script a été lu une seule fois,

    因为这段脚本只执行了一次,

  38. quand j'ai cliqué sur le drapeau vert, elle s'est orientée vers le chat,

    也就是我点击绿色旗帜时,它朝向了小猫,

  39. et puis le script est terminé.

    然后脚本就结束了。

  40. Donc nous allons lui dire de répéter cela indéfiniment pendant tout le jeu,

    因此,我们要让它在整个游戏过程中无限重复这个动作,

  41. nous allons répéter cela.

    我们将添加一个循环。

  42. va toujours s'orienter vers le chat.

    这样,它就会一直朝向小猫。

  43. Et maintenant, si je recommence le script, si je clique sur le drapeau vert,

    现在,如果我重新运行脚本,也就是再次点击绿色旗帜,

  44. voilà, la souris s'oriente vers le chat, elle fait face au chat.

    看,鼠标立刻朝向小猫,正对着它。

  45. Il me reste plus qu'à la faire avancer.

    接下来,我只需让它向前移动。

  46. Donc je veux qu'elle soit face au chat et je vais la faire avancer.

    所以,我要先确保它正对小猫,再让它前进。

  47. Et là, je vois qu'elle va très très vite.

    这时我发现,它移动得非常非常快。

  48. Le jeu est injouable à cette vitesse- là.

    以这种速度,游戏根本没法玩。

  49. Donc pour régler la vitesse, au lieu de la faire avancer de 10,

    因此,要调整速度:我们不一次前进10步,

  50. on va la faire avancer par exemple de 2 ou de 3, ce qui est plus raisonnable.

    而改为每次前进2步或3步,这样更合理。

  51. Donc si je recommence la partie, voilà, la souris se dirige vers le chat.

    所以,如果我重新开始游戏,看,鼠标便朝小猫移动过去。

  52. Alors là, c'est peut- être un petit peu lent, on pourrait augmenter la vitesse,

    不过这里可能有点慢,我们可以适当提高速度,

  53. et elle va toujours vers le chat.

    而且它始终朝着小猫移动。

  54. Alors ici, si je laisse faire,

    如果我放任不管,

  55. il se passe quelque chose d'un petit peu étrange. Vous voyez,

    会出现一个有点奇怪的现象:您看,

  56. quand elle arrive sur le chat,

    当它到达小猫位置时,

  57. il y a un effet graphique en fait qui fait que la souris se retourne en permanence,

    实际上出现了一个图形效果,导致鼠标不断翻转,

  58. ça change de position.

    位置一直在变化。

  59. Donc on va essayer de trouver un moyen d'éviter ça.

    因此,我们将尝试找到一种方法来避免这种情况。

  60. Donc ce que nous allons faire,

    接下来我们要做的是:

  61. c'est que nous allons faire dérouler ce script uniquement si la souris est à une

    仅当鼠标与小猫保持一定距离时,

  62. certaine distance du chat.

    特定距离之外。

  63. Alors dans les capteurs, nous avons un capteur qui détecte la distance entre le

    在传感器模块中,有一个传感器

  64. lutin, donc ici la souris, le pointeur de la souris, ou alors un lutin.

    可检测角色(此处是鼠标指针)与另一角色之间的距离。

  65. Donc ce que nous allons faire,

    具体来说:

  66. c'est que si la distance entre le chat et la souris est plus grande que 2,

    如果小猫与鼠标之间的距离大于2、

  67. 3, 4, 5, alors on va faire diriger la souris vers le chat.

    3、4或5,就让鼠标朝小猫方向移动。

  68. Donc nous allons avoir à

    因此我们需要

  69. vérifier si cette distance

    检查这个距离是否

  70. est plus grande que quelque chose.

    大于某个数值。

  71. Donc ici dans les opérateurs, je peux comparer,

    在运算符模块中,我可以进行比较:

  72. donc j'ai pris le bloc ici plus grand que, donc si la distance entre

    我选用了‘大于’积木。也就是说,如果鼠标与小猫之间的距离

  73. la souris et le chat est plus grande que 5,

    大于5,

  74. je vais pouvoir faire quelque chose.

    我就能执行相应操作。

  75. Et donc c'est une condition, si alors, donc je prends un bloc ici si alors.

    这是一个‘如果…那么…’条件判断,所以我选用这里的‘如果…那么…’积木。

  76. Et voici ce que je vais faire.

    下面就是我要执行的操作。

  77. Donc si la distance de la souris au chat est plus grande que 5,

    如果鼠标到小猫的距离大于5,

  78. alors j'oriente la souris vers le chat et j'avance.

    那么我就让鼠标转向小猫并向前移动。

  79. Sinon, je ne fais rien.

    否则,什么也不做。

  80. Alors voyons voir ce que ça donne.

    我们来实际看看效果如何。

  81. Donc ici, la distance est plus grande que 5,

    此时,距离大于5,

  82. donc la souris se dirige vers le chat. Et si la souris arrive sur le chat,

    所以鼠标会朝小猫移动。而当鼠标靠近小猫时,

  83. vous voyez la distance de 5 est quasiment négligeable ici,

    您会发现,此处的5单位距离几乎可以忽略不计,

  84. et il n'y a pas l'effet qu'il y avait tout à l'heure,

    之前那种令人不适的画面抖动效果

  85. qui était un effet désagréable de graphique.

    也就消失了。

  86. Ici, le script fonctionne.

    这里,脚本已能运行。

  87. Alors on peut rajouter encore quelque chose,

    因此,我们还能再添加一些内容,

  88. parce que la souris a deux costumes. Lorsque

    因为鼠标角色有两个造型。当

  89. l'on enchaîne les deux costumes, on a l'impression que la souris marche.

    我们交替切换这两个造型时,看起来就像鼠标在行走。

  90. Donc dans Apparence, on va la faire passer au costume suivant à chaque fois qu'elle

    所以在‘外观’类别中,我们将让它每次前进后

  91. a avancé. Voici.

    都切换到下一个造型。看,就是这样。

  92. Et si je la fais déplacer ici, voilà,

    如果我让它在这里移动,瞧,

  93. on a l'impression qu'elle marche ou qu'elle court vers le chat,

    看起来它正朝小猫走去,仿佛在走路或奔跑,

  94. et elle s'arrête si elle a touché le chat.

    一旦碰到小猫,它就会停下。

  95. Voilà, le script est fonctionnel, il est complet, on peut certainement.

    好了,这个脚本已能正常运行,而且功能完整。当然,我们还能

  96. l'améliorer, on verra ça plus tard,

    进一步优化它,稍后再讲,

  97. mais nous avons quelque chose qui fonctionne. Cet épisode est terminé,

    但目前我们已经做出了一个可运行的版本。本期节目到此结束,

  98. ne ratez pas le prochain épisode dans lequel nous reprendrons le script du premier

    请不要错过下一期——我们将重新调整第一期的脚本,

  99. épisode pour obtenir des mouvements un peu plus fluides et donc un jeu bien plus

    让角色动作更流畅,从而使游戏体验更好,

  100. jouable. Ne ratez pas ça, à bientôt.

    千万别错过,我们下期见!