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

288 lines
7.7KB

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