Колобок на Phaser
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

286 строки
7.5KB

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