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

152 line
4.5KB

  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. мир.игрок.тело = мир.объекты.тела[мир.игрок.задано.объект];
  25. if (!мир.игрок.тело)
  26. {
  27. return;
  28. }
  29. мир.игрок.переместить();
  30. мир.игрок.задатьМаскуСтолкновения();
  31. мир.игрок.отслеживатьПрыжкиПриземления();
  32. };
  33. // // // //
  34. мир.игрок.переместить = function()
  35. {
  36. var к = [
  37. мир.игрок.задано["клавиши.0"],
  38. мир.игрок.задано["клавиши.1"],
  39. //мир.игрок.задано["клавиши.2"],
  40. ];
  41. var влево = (мир.ввод.клавиши[к[0]] == true);
  42. var вправо = (мир.ввод.клавиши[к[1]] == true);
  43. var скоростьГ = мир.игрок.задано["скорость.0"];
  44. var скоростьX = 0;
  45. var скоростьВ = мир.игрок.задано["скорость.1"];
  46. var скоростьY = (мир.игрок.прыжок.статус == 1) ? -скоростьВ : мир.игрок.тело.velocity.y;
  47. if (влево)
  48. {
  49. скоростьX = -скоростьГ;
  50. }
  51. else if (вправо)
  52. {
  53. скоростьX = скоростьГ;
  54. }
  55. Matter.Sleeping.set(мир.игрок.тело, false);
  56. Matter.Body.setVelocity(мир.игрок.тело, { x: скоростьX, y: скоростьY });
  57. };
  58. // // // //
  59. мир.игрок.задатьМаскуСтолкновения = function()
  60. {
  61. var прыжок = мир.игрок.тело.velocity.y < -1;
  62. var маска = прыжок ? 1 : (1 | 2);
  63. мир.игрок.тело.collisionFilter.mask = маска;
  64. /*
  65. if (тело.velocity.y < мир.игрок.minv)
  66. {
  67. мир.игрок.minv = тело.velocity.y;
  68. }
  69. if (тело.velocity.y > мир.игрок.maxv)
  70. {
  71. мир.игрок.maxv = тело.velocity.y;
  72. }
  73. document.getElementById("отладка").innerHTML = `min: ${мир.игрок.minv} max: ${мир.игрок.maxv}`;
  74. if (Math.abs(мир.игрок.было - тело.velocity.y) > 0.001)
  75. {
  76. мир.игрок.было = тело.velocity.y;
  77. console.debug("vel", мир.игрок.было);
  78. }
  79. */
  80. };
  81. // // // /
  82. мир.игрок.отслеживатьПрыжкиПриземления = function()
  83. {
  84. if (мир.игрок.прыжок.статус == 1)
  85. {
  86. мир.игрок.прыжок.статус = 2;
  87. мир.действия.совершить("игрокВПрыжке");
  88. }
  89. var нетДвижения = (Math.abs(мир.игрок.тело.velocity.y) < мир.игрок.прыжок.скоростьОтсутствия);
  90. var клавиша = мир.игрок.задано["клавиши.2"];
  91. var вверх = (мир.ввод.клавиши[клавиша] == true);
  92. if (
  93. мир.игрок.прыжок.статус == 0 &&
  94. вверх &&
  95. нетДвижения
  96. ) {
  97. мир.игрок.прыжок.статус = 1;
  98. мир.игрок.приземление.скорость = 0;
  99. мир.действия.совершить("игрокНачалПрыжок");
  100. }
  101. if (мир.игрок.прыжок.статус != 2)
  102. {
  103. return;
  104. }
  105. var скорость = мир.игрок.тело.velocity.y;
  106. if (скорость > мир.игрок.приземление.скорость)
  107. {
  108. мир.игрок.приземление.скорость = скорость;
  109. }
  110. var сейчас = new Date();
  111. var прошло = сейчас - мир.игрок.прыжок.время;
  112. if (
  113. (прошло > 20) &&
  114. нетДвижения
  115. ) {
  116. мир.игрок.прыжок.время = сейчас;
  117. мир.игрок.прыжок.статус = 0;
  118. мир.действия.совершить("игрокПриземлился");
  119. }
  120. };