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

00150.игрок.js 5.2KB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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(1100, 190, 70, 10, фи);
  43. Matter.Composite.add(мир.физика.движок.world, тело1);
  44. var элемент2 = document.createElement("div");
  45. элемент2.style.position = "absolute";
  46. элемент2.style.display = "block";
  47. элемент2.style.transformOrigin = "center";
  48. элемент2.style.width = `70px`;
  49. элемент2.style.height = `70px`;
  50. элемент2.style.background = "url(р/колобок/колобок_неподвижен.png)",
  51. document.getElementById("корень").appendChild(элемент2);
  52. var ф2 = {
  53. isStatic: false,
  54. inertia: Infinity,
  55. collisionFilter: {
  56. mask: 1,
  57. },
  58. };
  59. var тело2 = Matter.Bodies.rectangle(1100, 150, 70, 70, ф2);
  60. Matter.Composite.add(мир.физика.движок.world, тело2);
  61. var ограничитель = Matter.Constraint.create({
  62. bodyA: тело1,
  63. bodyB: тело2,
  64. stiffness: 1,
  65. });
  66. Matter.Composite.add(мир.физика.движок.world, ограничитель);
  67. мир.игрок.раз = {
  68. элемент1: элемент1,
  69. тело1: тело1,
  70. элемент2: элемент2,
  71. тело2: тело2,
  72. }
  73. console.debug("создано раз");
  74. }
  75. // // // //
  76. function обновитьРаз()
  77. {
  78. if (!мир.игрок.раз)
  79. {
  80. return;
  81. }
  82. мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент1, мир.игрок.раз.тело1);
  83. мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент2, мир.игрок.раз.тело2);
  84. }
  85. // // // //
  86. function переместитьИгрока()
  87. {
  88. if (!мир.игрок.раз)
  89. {
  90. return;
  91. }
  92. //var тело = мир.объекты.тела[мир.игрок.задано.объект];
  93. //var тело = мир.объекты.тела["игрок"];
  94. var тело = мир.игрок.раз.тело1;
  95. //var тело = мир.игрок.раз.тело;
  96. if (!тело)
  97. {
  98. return;
  99. }
  100. var к = [
  101. мир.игрок.задано["клавиши.0"],
  102. мир.игрок.задано["клавиши.1"],
  103. мир.игрок.задано["клавиши.2"],
  104. ];
  105. var влево = (мир.ввод.клавиши[к[0]] == true);
  106. var вправо = (мир.ввод.клавиши[к[1]] == true);
  107. var вверх = (мир.ввод.клавиши[к[2]] == true);
  108. var скоростьГ = мир.игрок.задано["скорость.0"];
  109. var скоростьВ = мир.игрок.задано["скорость.1"];
  110. var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y;
  111. var скоростьX = 0;
  112. if (влево)
  113. {
  114. скоростьX = -скоростьГ;
  115. }
  116. else if (вправо)
  117. {
  118. скоростьX = скоростьГ;
  119. }
  120. Matter.Sleeping.set(тело, false);
  121. Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY });
  122. Matter.Sleeping.set(мир.игрок.раз.тело2, false);
  123. Matter.Body.setVelocity(мир.игрок.раз.тело2, { x: скоростьX, y: скоростьY });
  124. }
  125. // // // //
  126. function задатьИгрокуМаскуСтолкновения()
  127. {
  128. if (!мир.игрок.раз)
  129. {
  130. return;
  131. }
  132. //var тело = мир.объекты.тела[мир.игрок.задано.объект];
  133. //var тело = мир.объекты.тела["игрок"];
  134. var тело = мир.игрок.раз.тело1;
  135. //var тело = мир.игрок.раз.тело;
  136. if (!тело)
  137. {
  138. return;
  139. }
  140. var прыжок = тело.velocity.y < -1;
  141. var маска = прыжок ? 1 : (1 | 2);
  142. тело.collisionFilter.mask = маска;
  143. }