Колобок на 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.

296 lines
8.1KB

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