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

171 lines
4.7KB

  1. /*
  2. *
  3. * Реакции
  4. *
  5. */
  6. ЗагрузитьРесурсыКолобка= мир =>
  7. {
  8. //мир.сцена.load.image("колобок", "ресурсы/колобок/колобок_неподвижен.png");
  9. мир.сцена.load.spritesheet(
  10. "колобок",
  11. "ресурсы/колобок/колобок.png",
  12. {
  13. frameWidth: 97,
  14. frameHeight: 94,
  15. }
  16. );
  17. };
  18. // // // //
  19. СоздатьГруппыСущностей = мир =>
  20. {
  21. мир.каркас = мир.сцена.physics.add.staticGroup();
  22. мир.платформы = мир.сцена.physics.add.staticGroup();
  23. //мир.враги = мир.сцена.add.group();
  24. };
  25. // // // //
  26. СоздатьКолобка = мир =>
  27. {
  28. мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок");
  29. мир.колобок.depth = 10;
  30. мир.колобок.body.setSize(50);
  31. мир.колобок.setBounceY(0.1);
  32. мир.сцена.anims.create({
  33. key: "неподвижен",
  34. frames: [{ key: "колобок", frame: 0 }],
  35. frameRate: 20,
  36. })
  37. мир.сцена.anims.create({
  38. key: "движение",
  39. frames: мир.сцена.anims.generateFrameNumbers("колобок", { start: 23, end: 1 }),
  40. frameRate: 20,
  41. repeat: -1,
  42. })
  43. мир.сцена.anims.create({
  44. key: "прыжок",
  45. frames: [{ key: "колобок", frame: 24 }],
  46. frameRate: 20,
  47. })
  48. // Следить за колобком камерой.
  49. const камера = мир.сцена.cameras.main;
  50. камера.startFollow(мир.колобок, false, 0.1, 0.1);
  51. };
  52. // // // //
  53. ОпределятьСтолкновениеКолобкаИВраговСГруппамиСущностей = мир =>
  54. {
  55. мир.сцена.physics.add.collider(мир.колобок, мир.каркас);
  56. мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);
  57. /*
  58. мир.сцена.physics.add.collider(мир.враги, мир.каркас);
  59. мир.сцена.physics.add.collider(мир.враги, мир.платформы);
  60. */
  61. var враг = мир.сцена.physics.add.sprite(150, 400, "основа");
  62. враг.setScale(5, 5).refreshBody();
  63. враг.depth = 10;
  64. мир.сцена.physics.add.collider(враг, мир.каркас);
  65. //мир.сцена.physics.add.collider(враг, мир.платформы);
  66. /*
  67. var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
  68. столкновениеВраги.collideCallback = function(a, b) {
  69. мир.уведомить("столкновение с врагом");
  70. console.debug("столкновение с врагом");
  71. };
  72. */
  73. };
  74. // // // //
  75. ПереместитьКолобка = мир =>
  76. {
  77. if (!мир.управление)
  78. {
  79. мир.колобок.setVelocityX(0);
  80. мир.колобок.anims.play("неподвижен");
  81. return;
  82. }
  83. var x = 0;
  84. if (мир.управление.направление == -1)
  85. {
  86. x = -200;
  87. мир.колобок.anims.play("движение");
  88. мир.колобок.flipX = true;
  89. }
  90. else if (мир.управление.направление == 1)
  91. {
  92. x = 200;
  93. мир.колобок.anims.play("движение");
  94. мир.колобок.flipX = false;
  95. }
  96. мир.колобок.setVelocityX(x);
  97. if (мир.управление.прыжок && мир.колобок.body.touching.down)
  98. {
  99. мир.колобок.setVelocityY(-570);
  100. мир.колобок.anims.play("прыжок");
  101. }
  102. };
  103. // // // //
  104. ОтключитьСтолкновениеСПлатформами = мир => {
  105. мир.столкновениеПлатформы.active = false;
  106. };
  107. // // // //
  108. ВключитьСтолкновениеСПлатформами = мир => {
  109. мир.столкновениеПлатформы.active = true;
  110. };
  111. /*
  112. *
  113. * Последовательность
  114. *
  115. */
  116. мир.разобрать(`
  117. загрузить ресурсы сцены
  118. загрузить ресурсы колобка
  119. создать сцену
  120. создать группы сущностей
  121. создать колобка
  122. определять столкновение колобка и врагов с группами сущностей
  123. изменили управление
  124. переместить колобка
  125. столкновение с врагом
  126. отключить столкновение с платформами
  127. `);