Проверить Matter.js
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.

125 lines
3.8KB

  1. мир.игрок = {
  2. задано: {},
  3. прыжок: {
  4. статус: 0,
  5. время: new Date(),
  6. скоростьОтсутствия: 0.0001,
  7. },
  8. приземление: {
  9. скорость: 0,
  10. },
  11. тело: null,
  12. };
  13. // // // //
  14. мир.ключники.push(function(ключ, путь, значение){
  15. if (!ключ.startsWith("игрок"))
  16. {
  17. return;
  18. }
  19. var свойство = путь.slice(1).join(".");
  20. мир.игрок.задано[свойство] = значение;
  21. });
  22. // // // //
  23. мир.игрок.обновить = function() {
  24. var тело = мир.объекты.тела[мир.игрок.задано.объект];
  25. if (!тело)
  26. {
  27. тело = мир.тела.тела[мир.игрок.задано.тело];
  28. }
  29. мир.игрок.тело = тело;
  30. if (!мир.игрок.тело)
  31. {
  32. return;
  33. }
  34. мир.игрок.переместить();
  35. мир.игрок.отслеживатьПрыжкиПриземления();
  36. };
  37. // // // //
  38. мир.игрок.переместить = function()
  39. {
  40. var к = [
  41. мир.игрок.задано["клавиши.0"],
  42. мир.игрок.задано["клавиши.1"],
  43. ];
  44. var влево = (мир.ввод.клавиши[к[0]] == true);
  45. var вправо = (мир.ввод.клавиши[к[1]] == true);
  46. var скоростьГ = мир.игрок.задано["скорость.0"];
  47. var скоростьX = 0;
  48. var скоростьВ = мир.игрок.задано["скорость.1"];
  49. var скоростьY = (мир.игрок.прыжок.статус == 1) ? -скоростьВ : мир.игрок.тело.velocity.y;
  50. if (влево)
  51. {
  52. скоростьX = -скоростьГ;
  53. }
  54. else if (вправо)
  55. {
  56. скоростьX = скоростьГ;
  57. }
  58. Matter.Sleeping.set(мир.игрок.тело, false);
  59. Matter.Body.setVelocity(мир.игрок.тело, { x: скоростьX, y: скоростьY });
  60. };
  61. // // // /
  62. мир.игрок.отслеживатьПрыжкиПриземления = function()
  63. {
  64. if (мир.игрок.прыжок.статус == 1)
  65. {
  66. мир.игрок.прыжок.статус = 2;
  67. мир.события.уведомить("игрок в прыжке");
  68. }
  69. var нетДвижения = (Math.abs(мир.игрок.тело.velocity.y) < мир.игрок.прыжок.скоростьОтсутствия);
  70. var клавиша = мир.игрок.задано["клавиши.2"];
  71. var вверх = (мир.ввод.клавиши[клавиша] == true);
  72. if (
  73. мир.игрок.прыжок.статус == 0 &&
  74. вверх &&
  75. нетДвижения
  76. ) {
  77. мир.игрок.прыжок.статус = 1;
  78. мир.игрок.приземление.скорость = 0;
  79. мир.события.уведомить("игрок начал прыжок");
  80. }
  81. if (мир.игрок.прыжок.статус != 2)
  82. {
  83. return;
  84. }
  85. var скорость = мир.игрок.тело.velocity.y;
  86. if (скорость > мир.игрок.приземление.скорость)
  87. {
  88. мир.игрок.приземление.скорость = скорость;
  89. }
  90. var сейчас = new Date();
  91. var прошло = сейчас - мир.игрок.прыжок.время;
  92. if (
  93. (прошло > 20) &&
  94. нетДвижения
  95. ) {
  96. мир.игрок.прыжок.время = сейчас;
  97. мир.игрок.прыжок.статус = 0;
  98. мир.события.уведомить("игрок приземлился");
  99. }
  100. };