Колобок на Phaser
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

284 行
7.3KB

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