Колобок на Phaser
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

210 satır
5.6KB

  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.staticGroup();
  21. мир.платформы = мир.сцена.physics.add.staticGroup();
  22. мир.враги = мир.сцена.add.group();
  23. };
  24. // // // //
  25. СоздатьКолобка = мир =>
  26. {
  27. мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок");
  28. мир.колобок.depth = 10;
  29. мир.колобок.body.setSize(50);
  30. // портит логику анимации.
  31. //мир.колобок.setBounceY(0.1);
  32. // Следить за колобком камерой.
  33. const камера = мир.сцена.cameras.main;
  34. камера.startFollow(мир.колобок, false, 0.1, 0.1);
  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. мир.сцена.physics.add.collider(мир.враги, мир.платформы);
  64. var враг = мир.сцена.physics.add.sprite(750, 100, "основа");
  65. враг.setScale(5, 5).refreshBody();
  66. враг.depth = 10;
  67. мир.враги.add(враг);
  68. var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
  69. столкновениеВраги.overlapOnly = true;
  70. столкновениеВраги.collideCallback = function(a, b) {
  71. мир.уведомить("столкновение с врагом");
  72. console.debug("столкновение с врагом");
  73. };
  74. };
  75. // // // //
  76. ПереместитьКолобка = мир =>
  77. {
  78. if (!мир.управление)
  79. {
  80. мир.колобок.setVelocityX(0);
  81. return;
  82. }
  83. var x = 0;
  84. if (мир.управление.направление == -1)
  85. {
  86. x = -200;
  87. мир.колобок.flipX = true;
  88. }
  89. else if (мир.управление.направление == 1)
  90. {
  91. x = 200;
  92. мир.колобок.flipX = false;
  93. }
  94. мир.колобок.setVelocityX(x);
  95. if (мир.управление.прыжок && мир.колобок.body.touching.down)
  96. {
  97. мир.колобок.setVelocityY(-570);
  98. }
  99. };
  100. // // // //
  101. АнимироватьКолобка = мир => {
  102. var есть = "";
  103. if (мир.колобок.anims.currentAnim)
  104. {
  105. есть = мир.колобок.anims.currentAnim.key;
  106. }
  107. var надо = "колобок-неподвижен";
  108. if (!мир.колобок.body.touching.down) {
  109. надо = "колобок-прыжок";
  110. } else if (мир.колобок.body.velocity.x != 0) {
  111. надо = "колобок-движение";
  112. }
  113. if (есть != надо) {
  114. мир.колобок.anims.play(надо);
  115. мир.уведомить("изменили анимацию колобка");
  116. }
  117. };
  118. // // // //
  119. ОтключитьСтолкновениеСПлатформами = мир => {
  120. мир.столкновениеПлатформы.active = false;
  121. };
  122. // // // //
  123. ВключитьСтолкновениеСПлатформами = мир => {
  124. мир.столкновениеПлатформы.active = true;
  125. };
  126. // // // //
  127. ОстановитьВрагов = мир => {
  128. var враги = мир.враги.getChildren();
  129. for (var н in враги)
  130. {
  131. var враг = враги[н];
  132. враг.body.stop();
  133. }
  134. };
  135. /*
  136. *
  137. * Последовательность
  138. *
  139. */
  140. мир.разобрать(`
  141. загрузить ресурсы сцены
  142. загрузить ресурсы колобка
  143. создать сцену
  144. создать группы сущностей
  145. создать колобка
  146. создать анимации колобка
  147. определять столкновение колобка и врагов с группами сущностей
  148. изменили управление
  149. переместить колобка
  150. столкновение с врагом
  151. отключить столкновение с платформами
  152. обновить сцену
  153. анимировать колобка
  154. изменили анимацию колобка
  155. остановить врагов
  156. `);