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

96 linhas
2.7KB

  1. мир.игрок = {
  2. задано: {},
  3. обновить: function() {
  4. мир.игрок.переместить();
  5. мир.игрок.задатьМаскуСтолкновения();
  6. },
  7. maxv: 0,
  8. minv: 0,
  9. было: 0,
  10. };
  11. // // // //
  12. мир.ключники.push(function(ключ, путь, значение){
  13. if (!ключ.startsWith("игрок"))
  14. {
  15. return;
  16. }
  17. var свойство = путь.slice(1).join(".");
  18. мир.игрок.задано[свойство] = значение;
  19. });
  20. // // // //
  21. мир.игрок.переместить = function()
  22. {
  23. var тело = мир.объекты.тела[мир.игрок.задано.объект];
  24. if (!тело)
  25. {
  26. return;
  27. }
  28. var к = [
  29. мир.игрок.задано["клавиши.0"],
  30. мир.игрок.задано["клавиши.1"],
  31. мир.игрок.задано["клавиши.2"],
  32. ];
  33. var влево = (мир.ввод.клавиши[к[0]] == true);
  34. var вправо = (мир.ввод.клавиши[к[1]] == true);
  35. var вверх = (мир.ввод.клавиши[к[2]] == true);
  36. var скоростьГ = мир.игрок.задано["скорость.0"];
  37. var скоростьВ = мир.игрок.задано["скорость.1"];
  38. var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y;
  39. var скоростьX = 0;
  40. if (влево)
  41. {
  42. скоростьX = -скоростьГ;
  43. }
  44. else if (вправо)
  45. {
  46. скоростьX = скоростьГ;
  47. }
  48. Matter.Sleeping.set(тело, false);
  49. Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY });
  50. };
  51. // // // //
  52. мир.игрок.задатьМаскуСтолкновения = function()
  53. {
  54. var тело = мир.объекты.тела[мир.игрок.задано.объект];
  55. if (!тело)
  56. {
  57. return;
  58. }
  59. var прыжок = тело.velocity.y < -1;
  60. var маска = прыжок ? 1 : (1 | 2);
  61. тело.collisionFilter.mask = маска;
  62. if (тело.velocity.y < мир.игрок.minv)
  63. {
  64. мир.игрок.minv = тело.velocity.y;
  65. }
  66. if (тело.velocity.y > мир.игрок.maxv)
  67. {
  68. мир.игрок.maxv = тело.velocity.y;
  69. }
  70. document.getElementById("отладка").innerHTML = `min: ${мир.игрок.minv} max: ${мир.игрок.maxv}`;
  71. if (Math.abs(мир.игрок.было - тело.velocity.y) > 0.001)
  72. {
  73. мир.игрок.было = тело.velocity.y;
  74. console.debug("vel", мир.игрок.было);
  75. }
  76. };