diff --git a/00100.мир.js b/00100.мир.js index 6f2f437..4250359 100644 --- a/00100.мир.js +++ b/00100.мир.js @@ -28,10 +28,11 @@ var значения = мир.выпрямить(словарь); for (var ключ in значения) { + var путь = ключ.split("."); var значение = значения[ключ]; for (var номер in мир.ключники) { - мир.ключники[номер](ключ, значение); + мир.ключники[номер](ключ, путь, значение); } } }; diff --git a/00110.заголовок.js b/00110.заголовок.js index 951a80e..5b1be58 100644 --- a/00110.заголовок.js +++ b/00110.заголовок.js @@ -1,4 +1,4 @@ -мир.ключники.push(function(ключ, значение){ +мир.ключники.push(function(ключ, путь, значение){ if (ключ != "заголовок") { return; diff --git a/00120.физика.js b/00120.физика.js index 8c13a77..3ab4556 100644 --- a/00120.физика.js +++ b/00120.физика.js @@ -1,14 +1,13 @@ -мир.физика = { }; - -мир.физика.движок = Matter.Engine.create({ - enableSleeping: true, -}); - -мир.физика.обновить = function() -{ - Matter.Engine.update(мир.физика.движок); - requestAnimationFrame(мир.физика.обновить); +мир.физика = { + движок: null, + настройки: { + enableSleeping: true, + }, + создать: function() { + мир.физика.движок = Matter.Engine.create(мир.физика.настройки); + }, + обновить: function() { + Matter.Engine.update(мир.физика.движок); + }, }; -// Запустить обновление. -мир.физика.обновить(); diff --git a/00130.платформы.js b/00130.платформы.js index f8e1e5c..a039b29 100644 --- a/00130.платформы.js +++ b/00130.платформы.js @@ -1,19 +1,50 @@ -мир.платформы = {}; +мир.платформы = { + умолчание: { + x: 100, + y: 100, + ширина: 40, + высота: 20, + цвет: "ff0000", + }, + задано: {}, + тела: {}, +}; -мир.ключники.push(function(ключ, значение){ + +мир.ключники.push(function(ключ, путь, значение){ if (!ключ.startsWith("платформы")) { return; } - var к = ключ.split("."); - var имя = к[1]; -console.debug("имя:", имя); - if (!(имя in мир.платформы)) + + var имя = путь[1]; + var свойство = путь[2]; + + // Сохранить заданные значения. + if (!(имя in мир.платформы.задано)) + { + мир.платформы.задано[имя] = {}; + } + мир.платформы.задано[имя][свойство] = значение; + +console.debug("задано", мир.платформы.задано[имя]); + + // Удалить физическое тело. + if (имя in мир.платформы.тела) { - /* - мир.платформы[имя] = { - тело: - }; - */ + var тело = мир.платформы.тела[имя]; + Matter.Composite.remove(мир.физика.движок.world, тело); } + // Пересоздать физическое тело. + var задано = мир.платформы.задано[имя]; + var тело = Matter.Bodies.rectangle( + задано["x"] ? задано["x"] : мир.платформы.умолчание["x"], + задано["y"] ? задано["y"] : мир.платформы.умолчание["y"], + задано["ширина"] ? задано["ширина"] : мир.платформы.умолчание["ширина"], + задано["высота"] ? задано["высота"] : мир.платформы.умолчание["высота"], + { + isStatic: true, + } + ); + Matter.Composite.add(мир.физика.движок.world, тело); }); diff --git a/01000.пуск.js b/01000.пуск.js new file mode 100644 index 0000000..42ecb31 --- /dev/null +++ b/01000.пуск.js @@ -0,0 +1,9 @@ +мир.обновить = function() +{ + мир.физика.обновить(); + requestAnimationFrame(мир.обновить); +}; + +// Запустить. +мир.физика.создать(); +мир.обновить(); diff --git a/00300.пример.json.js b/01300.пример.json.js similarity index 55% rename from 00300.пример.json.js rename to 01300.пример.json.js index 213cb55..7200059 100644 --- a/00300.пример.json.js +++ b/01300.пример.json.js @@ -2,18 +2,8 @@ заголовок: "РК 0.1.0", платформы: { полка1: { - x: 0, - y: 0, - ширина: 200, - высота: 50, - цвет: "ff0000", - }, - полка2: { x: 100, - y: 0, - ширина: 200, - высота: 50, - цвет: "00ff00", + y: 100, }, }, спрайты: { diff --git a/index.html b/index.html index bb8d112..b307ee2 100644 --- a/index.html +++ b/index.html @@ -22,6 +22,7 @@ - + + diff --git a/old/.01.js.swp b/old/.01.js.swp new file mode 100644 index 0000000..a9bc571 Binary files /dev/null and b/old/.01.js.swp differ