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

00130.платформы.js 4.2KB

3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
3 年之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. мир.платформы = {
  2. умолчание: {
  3. x: 100,
  4. y: 100,
  5. ширина: 40,
  6. высота: 20,
  7. цвет: "#ff0000",
  8. статика: true,
  9. },
  10. задано: {},
  11. тела: {},
  12. div: {},
  13. обновить: function() {
  14. for (var имя in мир.платформы.тела)
  15. {
  16. var тело = мир.платформы.тела[имя];
  17. var div = мир.платформы.div[имя];
  18. let x = тело.bounds.min.x;
  19. let y = тело.bounds.min.y;
  20. let угол = тело.angle * (180 / Math.PI);
  21. //div.style.transform = `translate(${x}px, ${y}px) rotate(${угол}deg)`;
  22. div.style.transform = `rotate(${угол}deg)`;
  23. div.style.left = `${x}px`;
  24. div.style.top = `${y}px`;
  25. var задано = мир.платформы.задано[имя];
  26. var умолчание = мир.платформы.умолчание;
  27. var ширина = задано["ширина"] ? задано["ширина"] : умолчание["ширина"];
  28. var высота = задано["высота"] ? задано["высота"] : умолчание["высота"];
  29. div.style.transformOrigin = `${ширина / 2}px ${высота / 2}px`;
  30. }
  31. },
  32. };
  33. мир.ключники.push(function(ключ, путь, значение){
  34. if (!ключ.startsWith("платформы"))
  35. {
  36. return;
  37. }
  38. var имя = путь[1];
  39. var свойство = путь[2];
  40. // Сохранить заданные значения.
  41. if (!(имя in мир.платформы.задано))
  42. {
  43. мир.платформы.задано[имя] = {};
  44. }
  45. мир.платформы.задано[имя][свойство] = значение;
  46. console.debug("задано", мир.платформы.задано[имя]);
  47. // Удалить физическое тело.
  48. if (имя in мир.платформы.тела)
  49. {
  50. var тело = мир.платформы.тела[имя];
  51. Matter.Composite.remove(мир.физика.движок.world, тело);
  52. }
  53. // Пересоздать физическое тело.
  54. var задано = мир.платформы.задано[имя];
  55. var умолчание = мир.платформы.умолчание;
  56. var ширина = задано["ширина"] ? задано["ширина"] : умолчание["ширина"];
  57. var высота = задано["высота"] ? задано["высота"] : умолчание["высота"];
  58. var тело = Matter.Bodies.rectangle(
  59. задано["x"] ? задано["x"] : умолчание["x"],
  60. задано["y"] ? задано["y"] : умолчание["y"],
  61. ширина,
  62. высота,
  63. {
  64. isStatic: ("статика" in задано) ? задано["статика"] : умолчание["статика"],
  65. }
  66. );
  67. console.debug("создать тело", тело);
  68. Matter.Composite.add(мир.физика.движок.world, тело);
  69. мир.платформы.тела[имя] = тело;
  70. // Создать div.
  71. if (!(имя in мир.платформы.div))
  72. {
  73. var элемент = document.createElement("div");
  74. элемент.style.position = "absolute";
  75. элемент.style.display = "block";
  76. элемент.style.backgroundColor = умолчание["цвет"];
  77. элемент.style.width = `${ширина}px`;
  78. элемент.style.height = `${высота}px`;
  79. document.body.appendChild(элемент);
  80. мир.платформы.div[имя] = элемент;
  81. }
  82. // Обновить div.
  83. var элемент = мир.платформы.div[имя];
  84. if (свойство == "ширина")
  85. {
  86. элемент.style.width = `${ширина}px`;
  87. }
  88. else if (свойство == "высота")
  89. {
  90. элемент.style.height = `${высота}px`;
  91. }
  92. else if (свойство == "цвет")
  93. {
  94. элемент.style.backgroundColor = задано["цвет"];
  95. }
  96. });