Проверить Matter.js
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

00160.камера.js 1.5KB

3 년 전
3 년 전
3 년 전
3 년 전
3 년 전
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. мир.камера = {
  2. задано: {},
  3. обновить: обновитьКамеру,
  4. };
  5. // // // //
  6. мир.ключники.push(function(ключ, путь, значение){
  7. if (!ключ.startsWith("камера"))
  8. {
  9. return;
  10. }
  11. var свойство = путь.slice(1).join(".");
  12. мир.камера.задано[свойство] = значение;
  13. });
  14. // // // //
  15. function обновитьКамеру()
  16. {
  17. var объект = мир.камера.задано.объект;
  18. var центрировать = мир.камера.задано.центрировать;
  19. var тело = мир.объекты.тела[объект];
  20. if (!тело || !центрировать)
  21. {
  22. return;
  23. }
  24. var корень = document.getElementById("корень");
  25. // Сейчас.
  26. var x0 = 0;
  27. if (корень.style.left.endsWith("px"))
  28. {
  29. x0 = корень.style.left.slice(0, -2);
  30. }
  31. var y0 = 0;
  32. if (корень.style.top.endsWith("px"))
  33. {
  34. y0 = корень.style.top.slice(0, -2);
  35. }
  36. // Цель.
  37. var x1 = window.innerWidth / 2 - тело.position.x;
  38. var y1 = window.innerHeight / 2 - тело.position.y;
  39. // Плавно.
  40. function lerp(v0, v1, t) {
  41. return v0 * (1 - t) + v1 * t;
  42. }
  43. var x = lerp(x0, x1, центрировать);
  44. var y = lerp(y0, y1, центрировать);
  45. корень.style.left = `${x}px`;
  46. корень.style.top = `${y}px`;
  47. }