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

200 lines
5.1KB

  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. // // // //
  30. СоздатьАнимацииКолобка = мир =>
  31. {
  32. var анимации = мир.сцена.anims;
  33. анимации.create({
  34. key: "колобок-неподвижен",
  35. frames: [{ key: "колобок", frame: 0 }],
  36. frameRate: 20,
  37. })
  38. анимации.create({
  39. key: "колобок-движение",
  40. frames: мир.сцена.anims.generateFrameNumbers("колобок", { start: 23, end: 1 }),
  41. frameRate: 20,
  42. repeat: -1,
  43. })
  44. анимации.create({
  45. key: "колобок-прыжок",
  46. frames: [{ key: "колобок", frame: 24 }],
  47. frameRate: 20,
  48. })
  49. };
  50. // // // //
  51. НастроитьСтолкновениеКолобка = мир =>
  52. {
  53. мир.сцена.physics.add.collider(мир.колобок, мир.каркас);
  54. мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
  55. мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);
  56. var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
  57. столкновениеВраги.overlapOnly = true;
  58. столкновениеВраги.collideCallback = function(a, b) {
  59. мир.уведомить("столкновение с врагом");
  60. };
  61. };
  62. // // // //
  63. ПереместитьКолобка = мир =>
  64. {
  65. if (!мир.управление)
  66. {
  67. мир.колобок.setVelocityX(0);
  68. return;
  69. }
  70. var x = 0;
  71. if (мир.управление.направление == -1)
  72. {
  73. x = -200;
  74. мир.колобок.flipX = true;
  75. }
  76. else if (мир.управление.направление == 1)
  77. {
  78. x = 200;
  79. мир.колобок.flipX = false;
  80. }
  81. мир.колобок.setVelocityX(x);
  82. if (мир.управление.прыжок && мир.колобок.body.touching.down)
  83. {
  84. мир.колобок.setVelocityY(-570);
  85. }
  86. };
  87. // // // //
  88. АнимироватьКолобка = мир => {
  89. var прыжок = false;
  90. if (мир.управление && мир.управление.прыжок)
  91. {
  92. прыжок = true;
  93. }
  94. console.debug("touching.down/прыжок:", мир.колобок.body.touching.down, прыжок);
  95. var есть = "";
  96. if (мир.колобок.anims.currentAnim)
  97. {
  98. есть = мир.колобок.anims.currentAnim.key;
  99. }
  100. var надо = "колобок-неподвижен";
  101. if (мир.управление && мир.управление.прыжок && !мир.колобок.body.touching.down)
  102. {
  103. надо = "колобок-прыжок";
  104. }
  105. else if (мир.колобок.body.velocity.x != 0)
  106. {
  107. надо = "колобок-движение";
  108. }
  109. if (есть != надо)
  110. {
  111. мир.колобок.anims.play(надо);
  112. мир.уведомить("изменили анимацию колобка");
  113. }
  114. };
  115. // // // //
  116. ОтключитьСтолкновениеСПлатформами = мир => {
  117. мир.столкновениеПлатформы.active = false;
  118. };
  119. // // // //
  120. ВключитьСтолкновениеСПлатформами = мир => {
  121. мир.столкновениеПлатформы.active = true;
  122. };
  123. // // // //
  124. ОстановитьПередвижениеВещей = мир => {
  125. var вещи = мир.вещи.getChildren();
  126. for (var н in вещи)
  127. {
  128. var вещь = вещи[н];
  129. вещь.body.stop();
  130. }
  131. };
  132. /*
  133. *
  134. * Последовательность
  135. *
  136. */
  137. мир.разобрать(`
  138. загрузить ресурсы сцены
  139. загрузить ресурсы колобка
  140. создать сцену
  141. создать колобка
  142. создать анимации колобка
  143. настроить столкновение колобка
  144. столкновение с врагом
  145. отключить столкновение с платформами
  146. обновить сцену
  147. переместить колобка
  148. анимировать колобка
  149. изменили анимацию колобка
  150. остановить передвижение вещей
  151. `);