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

154 lines
3.8KB

  1. мир.игрок = {
  2. задано: {},
  3. обновить: function() {
  4. переместитьИгрока();
  5. задатьИгрокуМаскуСтолкновения();
  6. обновитьРаз();
  7. },
  8. раз: null,
  9. };
  10. // // // //
  11. мир.ключники.push(function(ключ, путь, значение){
  12. if (!ключ.startsWith("игрок"))
  13. {
  14. return;
  15. }
  16. var свойство = путь.slice(1).join(".");
  17. мир.игрок.задано[свойство] = значение;
  18. одинРазСоздать();
  19. });
  20. // // // //
  21. function одинРазСоздать()
  22. {
  23. if (мир.игрок.раз)
  24. {
  25. return;
  26. }
  27. var элемент1 = document.createElement("div");
  28. элемент1.style.position = "absolute";
  29. элемент1.style.display = "block";
  30. элемент1.style.transformOrigin = "center";
  31. элемент1.style.width = `70px`;
  32. элемент1.style.height = `10px`;
  33. элемент1.style.background = "url(р/отладка/основа.jpg)",
  34. document.getElementById("корень").appendChild(элемент1);
  35. var фи = {
  36. isStatic: false,
  37. inertia: Infinity,
  38. collisionFilter: {
  39. mask: 1,
  40. },
  41. };
  42. var тело1 = Matter.Bodies.rectangle(1170, 150, 70, 10, фи);
  43. Matter.Composite.add(мир.физика.движок.world, тело1);
  44. мир.игрок.раз = {
  45. элемент1: элемент1,
  46. тело1: тело1,
  47. //элемент2: ,
  48. //тело2: ,
  49. }
  50. console.debug("создано раз");
  51. }
  52. // // // //
  53. function обновитьРаз()
  54. {
  55. if (!мир.игрок.раз)
  56. {
  57. return;
  58. }
  59. мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент1, мир.игрок.раз.тело1);
  60. }
  61. // // // //
  62. function переместитьИгрока()
  63. {
  64. if (!мир.игрок.раз)
  65. {
  66. return;
  67. }
  68. //var тело = мир.объекты.тела[мир.игрок.задано.объект];
  69. //var тело = мир.объекты.тела["игрок"];
  70. var тело = мир.игрок.раз.тело1;
  71. if (!тело)
  72. {
  73. return;
  74. }
  75. var к = [
  76. мир.игрок.задано["клавиши.0"],
  77. мир.игрок.задано["клавиши.1"],
  78. мир.игрок.задано["клавиши.2"],
  79. ];
  80. var влево = (мир.ввод.клавиши[к[0]] == true);
  81. var вправо = (мир.ввод.клавиши[к[1]] == true);
  82. var вверх = (мир.ввод.клавиши[к[2]] == true);
  83. var скоростьГ = мир.игрок.задано["скорость.0"];
  84. var скоростьВ = мир.игрок.задано["скорость.1"];
  85. var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y;
  86. var скоростьX = 0;
  87. if (влево)
  88. {
  89. скоростьX = -скоростьГ;
  90. }
  91. else if (вправо)
  92. {
  93. скоростьX = скоростьГ;
  94. }
  95. Matter.Sleeping.set(тело, false);
  96. Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY });
  97. }
  98. // // // //
  99. function задатьИгрокуМаскуСтолкновения()
  100. {
  101. if (!мир.игрок.раз)
  102. {
  103. return;
  104. }
  105. //var тело = мир.объекты.тела[мир.игрок.задано.объект];
  106. //var тело = мир.объекты.тела["игрок"];
  107. var тело = мир.игрок.раз.тело1;
  108. if (!тело)
  109. {
  110. return;
  111. }
  112. var прыжок = тело.velocity.y < -1;
  113. var маска = прыжок ? 1 : (1 | 2);
  114. тело.collisionFilter.mask = маска;
  115. }