Колобок на Phaser
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

177 linhas
4.8KB

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