Проверить Matter.js
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

156 行
4.2KB

  1. мир.слежение = {
  2. умолчание: {
  3. смещение: [0, 0],
  4. скорость: 1,
  5. },
  6. задано: {},
  7. };
  8. // // // //
  9. мир.ключники.push(function(ключ, путь, значение){
  10. if (!путь[0].startsWith("слежение"))
  11. {
  12. return;
  13. }
  14. var имя = путь[1];
  15. var свойство = путь.slice(2).join(".");
  16. if (!мир.слежение.задано[имя])
  17. {
  18. мир.слежение.задано[имя] = {};
  19. }
  20. мир.слежение.задано[имя][свойство] = значение;
  21. });
  22. // // // //
  23. мир.слежение.обновить = function()
  24. {
  25. var за = мир.слежение.задано;
  26. var ум = мир.слежение.умолчание;
  27. for (var имя in за)
  28. {
  29. var эл = null;
  30. if (имя == "камера")
  31. {
  32. эл = document.getElementById("корень");
  33. }
  34. else
  35. {
  36. эл = мир.слежение.элемент(за[имя]);
  37. }
  38. var тело = null;
  39. var имяТела = за[имя]["объект"];
  40. if (имяТела)
  41. {
  42. тело = мир.объекты.тела[имяТела];
  43. }
  44. мир.слежение.обновитьЭлемент(эл, тело, за[имя], ум);
  45. }
  46. };
  47. // // // //
  48. мир.слежение.элемент = function(задано)
  49. {
  50. var id = null;
  51. var изображение = задано["изображение"];
  52. if (изображение)
  53. {
  54. id = мир.изображения.элементы[изображение].id;
  55. }
  56. return document.getElementById(id);
  57. };
  58. // // // //
  59. мир.слежение.обновитьЭлемент = function(элемент, тело, задано, умолчание)
  60. {
  61. if (!элемент || !тело)
  62. {
  63. return;
  64. }
  65. var скорость = задано.скорость ? задано.скорость : умолчание.скорость;
  66. var смещениеX = задано["смещение.0"] ? задано["смещение.0"] : умолчание.смещение[0];
  67. var смещениеY = задано["смещение.1"] ? задано["смещение.1"] : умолчание.смещение[1];
  68. // Сейчас.
  69. var x0 = 0;
  70. if (элемент.style.left.endsWith("px"))
  71. {
  72. x0 = элемент.style.left.slice(0, -2);
  73. }
  74. var y0 = 0;
  75. if (элемент.style.top.endsWith("px"))
  76. {
  77. y0 = элемент.style.top.slice(0, -2);
  78. }
  79. // Цель.
  80. //var x1 = window.innerWidth / 2 - тело.position.x;
  81. //var y1 = window.innerHeight / 2 - тело.position.y;
  82. var x1 = тело.position.x + смещениеX;
  83. var y1 = тело.position.y + смещениеY;
  84. // Плавно.
  85. function lerp(v0, v1, t) {
  86. return v0 * (1 - t) + v1 * t;
  87. }
  88. var x = lerp(x0, x1, скорость);
  89. var y = lerp(y0, y1, скорость);
  90. элемент.style.left = `${x}px`;
  91. элемент.style.top = `${y}px`;
  92. };
  93. // // // //
  94. /*
  95. function обновитьКамеру()
  96. {
  97. var объект = мир.камера.задано.объект;
  98. var центрировать = мир.камера.задано.центрировать;
  99. var тело = мир.объекты.тела[объект];
  100. if (!тело || !центрировать)
  101. {
  102. return;
  103. }
  104. var корень = document.getElementById("корень");
  105. // Сейчас.
  106. var x0 = 0;
  107. if (корень.style.left.endsWith("px"))
  108. {
  109. x0 = корень.style.left.slice(0, -2);
  110. }
  111. var y0 = 0;
  112. if (корень.style.top.endsWith("px"))
  113. {
  114. y0 = корень.style.top.slice(0, -2);
  115. }
  116. // Цель.
  117. var x1 = window.innerWidth / 2 - тело.position.x;
  118. var y1 = window.innerHeight / 2 - тело.position.y;
  119. // Плавно.
  120. function lerp(v0, v1, t) {
  121. return v0 * (1 - t) + v1 * t;
  122. }
  123. var x = lerp(x0, x1, центрировать);
  124. var y = lerp(y0, y1, центрировать);
  125. корень.style.left = `${x}px`;
  126. корень.style.top = `${y}px`;
  127. }
  128. */