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

146 linhas
4.4KB

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