A2 · 第9集 · 5:59

创建碰撞效果

本集讲解如何在编程中实现角色与场景元素或其它角色的碰撞效果,使角色无法穿过墙壁或按钮。

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

字幕

  1. Bonjour à tous, dans cette vidéo nous allons voir comment créer des collisions entre

    大家好,本期视频我们将学习如何在角色(例如这里的企鹅)与场景元素之间创建碰撞效果。

  2. un lutin, donc ici mon pingouin par exemple, et un élément du décor.

    也就是说,当角色碰到墙壁时,它将无法穿过墙壁,无论从哪个方向靠近。

  3. Donc ici cette collision va simplement se représenter par le fait que mon lutin ne

    因此,角色碰到墙壁时,

  4. peut pas traverser le mur, quel que soit le côté où il utilise.

    它都无法穿越过去。

  5. Donc nous allons voir comment faire une collision entre le lutin et un élément du

    我们将学习如何实现角色与场景元素之间的碰撞,

  6. décor, mais nous allons voir aussi comment faire une collision entre un lutin et un

    同时也会学习如何实现两个角色之间的碰撞——

  7. autre lutin, symbolisé ici par ce bloc gris qui est juste là,

    比如这里这个灰色方块,它其实也是一个角色,

  8. qui est un lutin, et je vois que mon pingouin ne peut pas passer non plus à travers

    我注意到我的企鹅也无法穿过它。

  9. ce lutin- là. Donc voyons comment s'y prendre.

    接下来,我们就来具体操作一下。

  10. Pour le moment, dans mon jeu, j'ai préparé deux lutins:

    目前,在我的游戏中,我已经准备了两个角色:

  11. le lutin pingouin et un lutin bouton à qui j'ai donné une position de départ.

    企鹅角色和一个按钮角色,并为按钮设定了初始位置。

  12. J'ai également un arrière- plan,

    我还添加了一个背景,

  13. donc ici un arrière- plan blanc où j'ai simplement tracé un rectangle entièrement

    也就是这个纯白色背景,上面我简单画了一个全黑的矩形。

  14. noir. Du côté du pingouin, j'ai déjà préparé le code de déplacement pour qu'il

    在企鹅角色这边,我已经预先编写好了移动代码,

  15. puisse se déplacer dans les quatre directions.

    让它能朝四个方向自由移动。

  16. Ici, je peux voir que pour le moment,

    目前可以看到,

  17. mon pingouin traverse l'ensemble des éléments. Donc moi,

    我的企鹅会直接穿过所有元素。

  18. je souhaiterais qu'il y ait une collision à chaque fois qu'il approche du rectangle

    我希望每当它靠近黑色矩形时,都能触发碰撞,

  19. noir, qu'en fait il ne puisse pas le faire.

    使它完全无法穿过去。

  20. Donc je vais essayer de trouver un code en ce sens,

    因此,我将尝试编写相应的代码,

  21. et pareil pour la partie bouton, je ne veux pas qu'il traverse ce bouton.

    同样地,对于按钮部分,我也希望它不能被企鹅穿过。

  22. Donc j'ai mis à disposition ici

    为此,我在这里提供了五个代码模块,

  23. cinq blocs qui vont être à intégrer dans le programme de déplacement déjà existant,

    它们需要整合进已有的移动程序中,

  24. donc on n'a pas besoin de refaire.

    无需重新编写整个程序。

  25. avec un drapeau vert, il faudra agencer l'ensemble de ces blocs,

    点击绿色旗帜后,你需要把这些模块合理组合起来,

  26. les glisser au bon endroit.

    并拖放到合适的位置。

  27. Et comme il y a quatre directions,

    因为有四个方向,

  28. il y aura quatre petits programmes à intégrer avec ces blocs- là.

    所以需要把这四个小程序用这些积木整合起来。

  29. Donc vous allez utiliser quatre fois les cinq blocs.

    因此,你们要使用这五个积木四次。

  30. Donc une fois que vous avez trouvé la bonne organisation de vos blocs,

    一旦找到积木的正确排列方式,

  31. vous pourrez les dupliquer et les mettre au bon endroit.

    就可以复制它们,并放到合适的位置。

  32. Pour le moment, le bloc que j'ai sorti, c'est le bloc qui s'occupe de l'axe X.

    目前我拖出来的这个积木,负责控制X轴。

  33. Bien évidemment, quand il faudra s'occuper de Y, ce bloc sera à modifier.

    显然,当处理Y轴时,这个积木需要修改。

  34. Vous pouvez mettre pause sur la vidéo et essayer de résoudre ce défi.

    你可以暂停视频,试着解决这个挑战。

  35. Voyons maintenant la correction ensemble.

    现在我们一起看答案。

  36. Donc ici, je vois que j'ai un bloc de condition,

    这里我看到有一个条件积木,

  37. donc on va simplement venir ajouter une condition en plus de la condition de capteur

    所以我们只需再添加一个条件,

  38. déjà appuyé. Donc ici, on va s'occuper pour commencer de la flèche droite.

    除了已有的传感器按下条件外。先来处理右箭头。

  39. Donc ça nous permettra de tester immédiatement si notre programme fonctionne.

    这样就能立刻测试程序是否运行正常。

  40. Donc ici, si la touche flèche droite est pressée,

    如果按下了右箭头键,

  41. alors mon lutin doit avancer de 10 sur l'axe de x,

    那么角色应在X轴上前进10个单位,

  42. donc on ajoute 10 pixels sur l'axe des x.

    也就是在X轴上增加10像素。

  43. Si je ne veux pas qu'il avance, ça veut dire que je vais lui demander de reculer.

    如果不想让它前进,就让它后退。

  44. Et ici, je vais lui demander de reculer d'autant de pixels qu'il est censé avancer,

    这里我让它后退的像素数,等于它本该前进的像素数,

  45. ce qui fait que le mouvement sera nul, parce que 10 pixels moins 10 pixels,

    这样移动量就为零了,因为10减10等于0,

  46. je serai à zéro, donc mon lutin ne bougera plus.

    角色就不会再移动了。

  47. Donc ici, je vais simplement dire que si.

    所以这里我直接说‘如果’……

  48. Je vais utiliser mon opérateur ou.

    我将使用‘或’运算符。

  49. Si la couleur noire est touchée, donc la couleur noire ici de mon mur,

    如果碰到了黑色,也就是墙壁的黑色,

  50. je vais mettre le bloc couleur à l'intérieur.

    我就把这个颜色积木放进去。

  51. En appuyant sur la petite couleur ici,

    点击这里的色块小图标,

  52. je peux accéder à la pipette qui va me permettre de venir choisir sur ma scène la

    我就能调出取色器,

  53. couleur que je souhaite, donc ici en noir.

    从而在舞台上选取想要的颜色——这里是黑色。

  54. Donc si la couleur noire est touchée ou alors que mon pingouin touche le lutin qui

    因此,如果碰到黑色,或者我的企鹅碰到名为‘按钮’的精灵,

  55. se nomme bouton, alors je veux ajouter moins dix à x.

    那么我就要给x减去10。

  56. Donc ici, je vais ajouter moins dix à x au moment où j'ai dix qui viennent

    这里,我要在x上减去10,

  57. s'ajouter, donc c'est bien quand la flèche droite est là.

    此时正好有10被加上——也就是说,这是右箭头被按下的时候。

  58. Donc je vais venir l'ajouter juste en dessous.

    因此,我将把它添加到这一行正下方。

  59. Donc si, hop là, juste là, si la flèche droite est pressée,

    如果——好了,就在这里——右箭头被按下,

  60. alors j'ajoute dix à x. Par contre,

    那么我就给x加10。但另一方面,

  61. si la couleur noire est touchée ou touche le bouton, j'ajoute moins dix.

    如果碰到黑色,或碰到按钮,我就减去10。

  62. Donc il faut bien que les conditions, vous voyez ici, soient décalées,

    所以请注意,这些条件(您看这里)必须错开设置,

  63. c'est- à- dire que cette condition- là, si couleur noire est touchée,

    也就是说,这个‘碰到黑色’的条件,

  64. elle ne fonctionne que si la flèche droite est déjà pressée en même temps.

    只有在右箭头同时被按下的情况下才生效。

  65. Je teste en appuyant sur le drapeau vert, j'appuie sur la flèche droite,

    我点击绿旗开始测试:先按右箭头,

  66. et là je vois que mon lutin ne peut plus traverser dans ce sens- là.

    这时我发现我的精灵不能再朝这个方向穿过去了。

  67. En revanche, si je fais le tour, je peux toujours passer à travers.

    但若我绕一圈,仍能从另一边穿过。

  68. Donc je vais simplement dupliquer le programme à partir du" si touche la couleur",

    因此,我将直接复制‘如果碰到颜色’这段程序,

  69. et je vais venir modifier cette valeur- là.

    然后修改这里的数值。

  70. Donc là, sur la flèche gauche appuyée, on ajoute- 10 pour aller

    现在,当按下左箭头时,我们减去10,

  71. sur la gauche de notre axe.

    让角色沿x轴向左移动。

  72. Donc ici, en sens inverse, si je ne veux plus qu'il bouge, je vais ajouter 10.

    因此,在相反方向上,若不想让它再移动,我就改为加10。

  73. Je viens ajouter ce bloc en dessous de" ajouter 10 à x",

    我把这个积木块添加到‘给x加10’的下方,

  74. donc j'ai bien le décalage différencié.

    这样就实现了不同的偏移效果。

  75. Je teste, je ne peux pas passer à droite, je fais le tour,

    我再测试一下:不能往右走,绕过去后,

  76. je ne peux pas passer à gauche.

    也不能往左走了。

  77. Et on va faire ça de même manière dans les quatre directions.

    接下来,我们用同样的方法处理四个方向。

  78. Donc là, maintenant, vous l'aurez compris,

    现在大家应该明白了,

  79. ici on va travailler sur l'axe des y, donc ce bloc- là,

    这里我们要操作的是y轴,因此这个积木块,

  80. je ne peux plus l'utiliser. Je vais aller chercher directement le" ajouter 10 à y".

    不能再用了,我要直接选用‘给y加10’。

  81. Donc ajouter 10 à y interviendra pour la flèche du bas.

    因此,给y加10将控制向下的箭头。

  82. Et je le duplique à nouveau, je vais mettre- 10 à y cette fois- ci pour la flèche du

    我再次复制它,这次给y减去10,

  83. haut. J'appuie sur le drapeau vert, je teste,

    用于向上的箭头。我点击绿色旗子开始测试:

  84. donc je ne peux pas passer dans ce sens- là,

    我无法朝这个方向通过,

  85. je ne peux pas passer à travers en descendant, je ne peux pas aller à gauche,

    不能向下穿过,也不能向左移动,

  86. et pour le bouton, pareil, je ne peux plus passer à travers.

    按钮也一样,我无法再穿过去了。

  87. Donc là, on a créé une collision au niveau du mouvement de notre pingouin,

    现在,我们已为企鹅的移动设置了碰撞检测,

  88. entre un élément du décor en sélectionnant le capteur de couleur,

    通过选择颜色感应器,实现与背景元素的碰撞,

  89. et entre un lutin en sélectionnant le capteur de contact avec un autre lutin.

    并通过选择“接触其他角色”感应器,实现与其他角色的碰撞。

  90. Donc voilà comment faire, par exemple, un jeu de labyrinthe.

    这就是制作迷宫类游戏的方法示例。