diff --git a/00130.платформы.js b/00130.платформы.js index 4535d0f..3b9e64b 100644 --- a/00130.платформы.js +++ b/00130.платформы.js @@ -5,10 +5,36 @@ ширина: 40, высота: 20, цвет: "#ff0000", + статика: true, }, задано: {}, тела: {}, div: {}, + обновить: function() { + for (var имя in мир.платформы.тела) + { + var тело = мир.платформы.тела[имя]; + var div = мир.платформы.div[имя]; + let x = тело.bounds.min.x; + let y = тело.bounds.min.y; + let угол = тело.angle * (180 / Math.PI); + //div.style.transform = `translate(${x}px, ${y}px) rotate(${угол}deg)`; + div.style.transform = `rotate(${угол}deg)`; + div.style.left = `${x}px`; + div.style.top = `${y}px`; + + + + var задано = мир.платформы.задано[имя]; + var умолчание = мир.платформы.умолчание; + var ширина = задано["ширина"] ? задано["ширина"] : умолчание["ширина"]; + var высота = задано["высота"] ? задано["высота"] : умолчание["высота"]; + + div.style.transformOrigin = `${ширина / 2}px ${высота / 2}px`; + + + } + }, }; @@ -21,19 +47,6 @@ var имя = путь[1]; var свойство = путь[2]; - // Создать div. - if (!(имя in мир.платформы.div)) - { - var элемент = document.createElement("div"); - элемент.style.position = "absolute"; - элемент.style.display = "block"; - элемент.style.backgroundColor = "#ff0000"; - элемент.style.width = "100px"; - элемент.style.height = "100px"; - document.body.appendChild(элемент); - мир.платформы.div[имя] = элемент; - } - // Сохранить заданные значения. if (!(имя in мир.платформы.задано)) { @@ -52,16 +65,49 @@ console.debug("задано", мир.платформы.задано[имя]); // Пересоздать физическое тело. var задано = мир.платформы.задано[имя]; var умолчание = мир.платформы.умолчание; + + var ширина = задано["ширина"] ? задано["ширина"] : умолчание["ширина"]; + var высота = задано["высота"] ? задано["высота"] : умолчание["высота"]; + var тело = Matter.Bodies.rectangle( задано["x"] ? задано["x"] : умолчание["x"], задано["y"] ? задано["y"] : умолчание["y"], - задано["ширина"] ? задано["ширина"] : умолчание["ширина"], - задано["высота"] ? задано["высота"] : умолчание["высота"], + ширина, + высота, { - isStatic: true, + isStatic: ("статика" in задано) ? задано["статика"] : умолчание["статика"], } ); console.debug("создать тело", тело); Matter.Composite.add(мир.физика.движок.world, тело); мир.платформы.тела[имя] = тело; + + // Создать div. + if (!(имя in мир.платформы.div)) + { + var элемент = document.createElement("div"); + элемент.style.position = "absolute"; + элемент.style.display = "block"; + элемент.style.backgroundColor = умолчание["цвет"]; + элемент.style.width = `${ширина}px`; + элемент.style.height = `${высота}px`; + document.body.appendChild(элемент); + мир.платформы.div[имя] = элемент; + } + + // Обновить div. + var элемент = мир.платформы.div[имя]; + if (свойство == "ширина") + { + элемент.style.width = `${ширина}px`; + } + else if (свойство == "высота") + { + элемент.style.height = `${высота}px`; + } + else if (свойство == "цвет") + { + элемент.style.backgroundColor = задано["цвет"]; + } + }); diff --git a/01000.пуск.js b/01000.пуск.js index 42ecb31..31fa3ca 100644 --- a/01000.пуск.js +++ b/01000.пуск.js @@ -1,6 +1,7 @@ мир.обновить = function() { мир.физика.обновить(); + мир.платформы.обновить(); requestAnimationFrame(мир.обновить); }; diff --git a/01300.пример.json.js b/01300.пример.json.js index 7200059..8ed4cf6 100644 --- a/01300.пример.json.js +++ b/01300.пример.json.js @@ -1,9 +1,24 @@ мир.разобрать({ заголовок: "РК 0.1.0", платформы: { - полка1: { - x: 100, - y: 100, + пол: { + x: 400, + y: 500, + ширина: 700, + высота: 50, + цвет: "#550055", + }, + квадрат1: { + x: 400, + y: 300, + статика: false, + цвет: "#aaaaaa", + }, + квадрат2: { + x: 415, + y: 470, + статика: true, + цвет: "#aaffaa", }, }, спрайты: {