Колобок на Phaser
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

292 lines
8.0KB

  1. /*
  2. *
  3. * Реакции
  4. *
  5. */
  6. ЗагрузитьРесурсыКолобка= мир =>
  7. {
  8. мир.сцена.load.spritesheet(
  9. "колобок",
  10. "ресурсы/колобок/колобок.png",
  11. {
  12. frameWidth: 97,
  13. frameHeight: 94,
  14. }
  15. );
  16. мир.сцена.load.audio("прыжок", "ресурсы/звуки/331381__qubodup__public-domain-jump-sound.wav");
  17. мир.сцена.load.audio("повреждение", "ресурсы/звуки/437650__dersuperanton__getting-hit-damage-scream.wav");
  18. };
  19. // // // //
  20. СоздатьКолобка = мир =>
  21. {
  22. мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок");
  23. мир.колобок.depth = 10;
  24. мир.колобок.body.setSize(50);
  25. // Портит анимацию прыжков!
  26. //мир.колобок.setBounceY(0.1);
  27. // Следить за колобком камерой.
  28. const камера = мир.сцена.cameras.main;
  29. камера.startFollow(мир.колобок, false, 0.1, 0.1);
  30. мир.состояниеКолобка = {
  31. мигать: false,
  32. мигание: { },
  33. прыгучесть: -570,
  34. коэффициентПрыгучести: 1,
  35. };
  36. };
  37. // // // //
  38. СоздатьАнимацииКолобка = мир =>
  39. {
  40. var анимации = мир.сцена.anims;
  41. анимации.create({
  42. key: "колобок-неподвижен",
  43. frames: [{ key: "колобок", frame: 0 }],
  44. frameRate: 20,
  45. })
  46. анимации.create({
  47. key: "колобок-движение",
  48. frames: мир.сцена.anims.generateFrameNumbers("колобок", { start: 23, end: 1 }),
  49. frameRate: 20,
  50. repeat: -1,
  51. })
  52. анимации.create({
  53. key: "колобок-прыжок",
  54. frames: [{ key: "колобок", frame: 24 }],
  55. frameRate: 20,
  56. })
  57. };
  58. // // // //
  59. НастроитьСтолкновениеКолобка = мир =>
  60. {
  61. мир.сцена.physics.add.collider(мир.колобок, мир.каркас);
  62. мир.столкновениеВещи = мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
  63. мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);
  64. var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
  65. столкновениеВраги.overlapOnly = true;
  66. столкновениеВраги.collideCallback = function(a, b) {
  67. мир.уведомить("столкновение с врагом");
  68. };
  69. };
  70. // // // //
  71. ПереместитьКолобка = мир =>
  72. {
  73. if (!мир.управление)
  74. {
  75. мир.колобок.setVelocityX(0);
  76. return;
  77. }
  78. var x = 0;
  79. if (мир.управление.направление == -1)
  80. {
  81. x = -200;
  82. мир.колобок.flipX = true;
  83. }
  84. else if (мир.управление.направление == 1)
  85. {
  86. x = 200;
  87. мир.колобок.flipX = false;
  88. }
  89. мир.колобок.setVelocityX(x);
  90. if (мир.управление.прыжок && мир.колобок.body.touching.down)
  91. {
  92. var скорость = мир.состояниеКолобка.прыгучесть * мир.состояниеКолобка.коэффициентПрыгучести;
  93. мир.колобок.setVelocityY(скорость);
  94. мир.сцена.sound.play("прыжок");
  95. }
  96. };
  97. // // // //
  98. АнимироватьКолобка = мир =>
  99. {
  100. var есть = "";
  101. if (мир.колобок.anims.currentAnim)
  102. {
  103. есть = мир.колобок.anims.currentAnim.key;
  104. }
  105. var надо = "колобок-неподвижен";
  106. if (мир.управление && мир.управление.прыжок && !мир.колобок.body.touching.down)
  107. {
  108. надо = "колобок-прыжок";
  109. }
  110. else if (мир.колобок.body.velocity.x != 0)
  111. {
  112. надо = "колобок-движение";
  113. }
  114. if (есть != надо)
  115. {
  116. мир.колобок.anims.play(надо);
  117. мир.уведомить("изменили анимацию колобка");
  118. }
  119. };
  120. // // // //
  121. ОтключитьСтолкновениеСПлатформамиИВещами = мир =>
  122. {
  123. мир.столкновениеПлатформы.active = false;
  124. мир.столкновениеВещи.active = false;
  125. };
  126. // // // //
  127. ВключитьСтолкновениеСПлатформамиИВещами = мир =>
  128. {
  129. мир.столкновениеПлатформы.active = true;
  130. мир.столкновениеВещи.active = true;
  131. };
  132. // // // //
  133. ОстановитьПередвижениеВещей = мир =>
  134. {
  135. var вещи = мир.вещи.getChildren();
  136. for (var н in вещи)
  137. {
  138. var вещь = вещи[н];
  139. if (вещь.body.touching.down)
  140. {
  141. вещь.body.stop();
  142. }
  143. }
  144. };
  145. // // // //
  146. НачатьМиганиеКолобка = мир =>
  147. {
  148. var конец = new Date();
  149. конец.setSeconds(конец.getSeconds() + 8);
  150. мир.состояниеКолобка.мигание.окончание = конец;
  151. мир.сцена.sound.stopByKey("повреждение");
  152. мир.сцена.sound.play("повреждение");
  153. if (мир.состояниеКолобка.мигать)
  154. {
  155. return;
  156. }
  157. мир.состояниеКолобка.мигать = true;
  158. мир.состояниеКолобка.мигание = {
  159. шаг: 0.1,
  160. цель: 0,
  161. };
  162. мир.уведомить("начали мигать колобка");
  163. };
  164. // // // //
  165. МигатьКолобка = мир =>
  166. {
  167. if (!мир.состояниеКолобка.мигать)
  168. {
  169. return;
  170. }
  171. var м = мир.состояниеКолобка.мигание;
  172. var сейчас = new Date();
  173. if (м.окончание - сейчас < 0)
  174. {
  175. мир.состояниеКолобка.мигать = false;
  176. мир.колобок.alpha = 1;
  177. мир.уведомить("закончили мигать колобка");
  178. return;
  179. }
  180. var к = (м.цель == 1) ? 1 : -1;
  181. мир.колобок.alpha += к * м.шаг;
  182. if ((мир.колобок.alpha <= 0) || (мир.колобок.alpha >= 1))
  183. {
  184. м.цель = к * -1;
  185. }
  186. };
  187. // // // //
  188. УменьшитьПрыгучестьКолобка = мир =>
  189. {
  190. мир.состояниеКолобка.коэффициентПрыгучести = 0.6;
  191. };
  192. // // // //
  193. ВосстановитьПрыгучестьКолобка = мир =>
  194. {
  195. мир.состояниеКолобка.коэффициентПрыгучести = 1;
  196. };
  197. /*
  198. *
  199. * Последовательность
  200. *
  201. */
  202. мир.разобрать(`
  203. загрузить ресурсы сцены
  204. загрузить ресурсы колобка
  205. создать сцену
  206. создать колобка
  207. создать анимации колобка
  208. настроить столкновение колобка
  209. столкновение с врагом
  210. начать мигание колобка
  211. обновить сцену
  212. переместить колобка
  213. анимировать колобка
  214. мигать колобка
  215. остановить передвижение вещей
  216. начали мигать колобка
  217. отключить столкновение с платформами и вещами
  218. уменьшить прыгучесть колобка
  219. закончили мигать колобка
  220. включить столкновение с платформами и вещами
  221. восстановить прыгучесть колобка
  222. `);