@@ -71,7 +71,7 @@ function Изображения(корень) | |||||
var x = за.x ? за.x : ум.x; | var x = за.x ? за.x : ум.x; | ||||
var y = за.y ? за.y : ум.y; | var y = за.y ? за.y : ум.y; | ||||
var угол = за.угол ? за.угол : ум.угол; | var угол = за.угол ? за.угол : ум.угол; | ||||
this.обновитьРасположение(x, y, угол); | |||||
this.обновитьРасположение(имя, x, y, угол); | |||||
} | } | ||||
else if (свойство.startsWith("вид")) | else if (свойство.startsWith("вид")) | ||||
{ | { | ||||
@@ -80,8 +80,10 @@ function Изображения(корень) | |||||
} | } | ||||
}; | }; | ||||
this.обновитьРасположение = function(x, y, угол) | |||||
this.обновитьРасположение = function(имя, x, y, угол) | |||||
{ | { | ||||
var за = this.задано[имя]; | |||||
var эл = this.элементы[имя]; | |||||
var transform = `translate(${x}px, ${y}px) rotate(${угол}deg) `; | var transform = `translate(${x}px, ${y}px) rotate(${угол}deg) `; | ||||
if (за["вид.transform"]) | if (за["вид.transform"]) | ||||
{ | { | ||||
@@ -0,0 +1,168 @@ | |||||
мир.объекты = { | |||||
умолчание: { | |||||
x: 0, | |||||
y: 0, | |||||
ширина: 40, | |||||
высота: 20, | |||||
физика: { | |||||
isStatic: true, | |||||
}, | |||||
}, | |||||
задано: {}, | |||||
тела: {}, | |||||
имена: {}, | |||||
элементы: {}, | |||||
свойстваТела: ["x", "y", "ширина", "высота", "физика"], | |||||
}; | |||||
// // // // | |||||
мир.ключники.push(function(ключ, путь, значение){ | |||||
if (!ключ.startsWith("объекты")) | |||||
{ | |||||
return; | |||||
} | |||||
var имя = путь[1]; | |||||
var свойство = путь[2]; | |||||
if (!(имя in мир.объекты.задано)) | |||||
{ | |||||
мир.объекты.задано[имя] = {}; | |||||
} | |||||
var свойствоПуть = путь.slice(2).join("."); | |||||
мир.объекты.задано[имя][свойствоПуть] = значение; | |||||
мир.объекты.пересоздатьТело(имя, свойство); | |||||
мир.объекты.обновитьЭлемент(имя, свойство, значение); | |||||
мир.объекты.обновитьВидЭлемента(путь, имя, свойство, значение); | |||||
}); | |||||
// // // // | |||||
мир.объекты.обновить = function() | |||||
{ | |||||
for (var имя in мир.объекты.тела) | |||||
{ | |||||
var тело = мир.объекты.тела[имя]; | |||||
var элемент = мир.объекты.элементы[имя]; | |||||
if (!тело || !элемент) | |||||
{ | |||||
continue; | |||||
} | |||||
var засинхрили = мир.синхронизироватьЭлементТело(элемент, тело); | |||||
// Учесть значения transform из JSON-JS. | |||||
if (засинхрили) | |||||
{ | |||||
var transform = мир.объекты.задано[имя]["вид.transform"]; | |||||
if (transform) | |||||
{ | |||||
элемент.style.transform += transform; | |||||
} | |||||
} | |||||
} | |||||
}; | |||||
// // // // | |||||
мир.объекты.пересоздатьТело = function(имя, свойство) | |||||
{ | |||||
if (!мир.объекты.свойстваТела.includes(свойство)) | |||||
{ | |||||
return; | |||||
} | |||||
// Удалить физическое тело. | |||||
if (имя in мир.объекты.тела) | |||||
{ | |||||
var тело = мир.объекты.тела[имя]; | |||||
Matter.Composite.remove(мир.физика.движок.world, тело); | |||||
delete мир.объекты.имена[тело.id]; | |||||
} | |||||
// Пересоздать физическое тело. | |||||
var за = мир.объекты.задано[имя]; | |||||
var ум = мир.объекты.умолчание; | |||||
var x = за.x != null ? за.x : ум.x; | |||||
var y = за.y != null ? за.y : ум.y; | |||||
var ширина = за.ширина ? за.ширина : ум.ширина; | |||||
var высота = за.высота ? за.высота : ум.высота; | |||||
// Переводим x,y из левого-верхнего угла в центр. | |||||
x = x + ширина / 2.0; | |||||
y = y + высота / 2.0; | |||||
var физика = {}; | |||||
Object.assign(физика, ум.физика); | |||||
for (var путь in за) | |||||
{ | |||||
if (путь.startsWith("физика")) | |||||
{ | |||||
var свойство = путь.slice(7); | |||||
мир.задать(физика, свойство, за[путь]); | |||||
} | |||||
} | |||||
var тело = Matter.Bodies.rectangle(x, y, ширина, высота, физика); | |||||
Matter.Composite.add(мир.физика.движок.world, тело); | |||||
мир.объекты.тела[имя] = тело; | |||||
мир.объекты.имена[тело.id] = имя; | |||||
}; | |||||
// // // // | |||||
мир.объекты.обновитьЭлемент = function(имя, свойство, значение) | |||||
{ | |||||
var за = мир.объекты.задано[имя]; | |||||
var ум = мир.объекты.умолчание; | |||||
if (!(имя in мир.объекты.элементы)) | |||||
{ | |||||
var элемент = document.createElement("div"); | |||||
элемент.id = `объекты-${имя}`; | |||||
элемент.style.position = "absolute"; | |||||
элемент.style.display = "block"; | |||||
элемент.style.transformOrigin = "center"; | |||||
document.getElementById("корень").appendChild(элемент); | |||||
мир.объекты.элементы[имя] = элемент; | |||||
// Свойства по умолчанию. | |||||
элемент.style.width = `${ум.ширина}px`; | |||||
элемент.style.height = `${ум.высота}px`; | |||||
} | |||||
var элемент = мир.объекты.элементы[имя]; | |||||
if (свойство == "ширина") | |||||
{ | |||||
var ширина = за["ширина"] ? за["ширина"] : ум["ширина"]; | |||||
элемент.style.width = `${ширина}px`; | |||||
} | |||||
else if (свойство == "высота") | |||||
{ | |||||
var высота = за["высота"] ? за["высота"] : ум["высота"]; | |||||
элемент.style.height = `${высота}px`; | |||||
} | |||||
} | |||||
// // // // | |||||
мир.объекты.обновитьВидЭлемента = function(путь, имя, свойство, значение) | |||||
{ | |||||
if (свойство != "вид") | |||||
{ | |||||
return; | |||||
} | |||||
var элемент = мир.объекты.элементы[имя]; | |||||
var параметр = путь[3]; | |||||
элемент.style.setProperty(параметр, значение); | |||||
} |
@@ -30,8 +30,7 @@ | |||||
мир.игрок.обновить = function() { | мир.игрок.обновить = function() { | ||||
/**///мир.игрок.тело = мир.объекты.тела[мир.игрок.задано.объект]; | |||||
мир.игрок.тело = мир.рт.тело; | |||||
мир.игрок.тело = мир.объекты.тела[мир.игрок.задано.объект]; | |||||
if (!мир.игрок.тело) | if (!мир.игрок.тело) | ||||
{ | { | ||||
return; | return; | ||||
@@ -50,7 +49,6 @@ | |||||
var к = [ | var к = [ | ||||
мир.игрок.задано["клавиши.0"], | мир.игрок.задано["клавиши.0"], | ||||
мир.игрок.задано["клавиши.1"], | мир.игрок.задано["клавиши.1"], | ||||
//мир.игрок.задано["клавиши.2"], | |||||
]; | ]; | ||||
var влево = (мир.ввод.клавиши[к[0]] == true); | var влево = (мир.ввод.клавиши[к[0]] == true); | ||||
var вправо = (мир.ввод.клавиши[к[1]] == true); | var вправо = (мир.ввод.клавиши[к[1]] == true); | ||||
@@ -2,14 +2,15 @@ function Пуск() | |||||
{ | { | ||||
this.запустить = function() | this.запустить = function() | ||||
{ | { | ||||
мир.физика.создать(); | |||||
var корень = document.getElementById("корень"); | var корень = document.getElementById("корень"); | ||||
мир.изображения = new Изображения(корень); | мир.изображения = new Изображения(корень); | ||||
мир.физика.создать(); | |||||
//мир.тела = new Тела(); | |||||
мир.столкновения.создать(); | мир.столкновения.создать(); | ||||
мир.звуки = new Звуки(мир.ключники, мир.события); | мир.звуки = new Звуки(мир.ключники, мир.события); | ||||
мир.движение = new Движение(мир.ключники); | мир.движение = new Движение(мир.ключники); | ||||
/**/мир.ограничитель = new Ограничитель(); | |||||
/**/мир.рт = new РучноеТело(мир.события); | |||||
/**///мир.ограничитель = new Ограничитель(); | |||||
/**///мир.рт = new РучноеТело(мир.события); | |||||
this.настроитьОбработкуКлючей(); | this.настроитьОбработкуКлючей(); | ||||
this.обновить(); | this.обновить(); | ||||
@@ -27,9 +28,10 @@ function Пуск() | |||||
this.обновить = function() | this.обновить = function() | ||||
{ | { | ||||
/**/мир.ограничитель.обновить(); | |||||
/**/мир.рт.обновить(); | |||||
/**///мир.ограничитель.обновить(); | |||||
/**///мир.рт.обновить(); | |||||
мир.физика.обновить(); | мир.физика.обновить(); | ||||
//мир.тела.обновить(); | |||||
мир.объекты.обновить(); | мир.объекты.обновить(); | ||||
мир.игрок.обновить(); | мир.игрок.обновить(); | ||||
мир.слежение.обновить(); | мир.слежение.обновить(); | ||||
@@ -110,7 +110,12 @@ | |||||
background: "url(р/отладка/основа.jpg)", | background: "url(р/отладка/основа.jpg)", | ||||
//display: "none", | //display: "none", | ||||
}, | }, | ||||
физика: { | |||||
isStatic: false, | |||||
inertia: Infinity, | |||||
}, | |||||
}, | }, | ||||
/* | |||||
сенсорИгрока: { | сенсорИгрока: { | ||||
x: 170, | x: 170, | ||||
y: 350, | y: 350, | ||||
@@ -132,32 +137,28 @@ | |||||
inertia: Infinity, | inertia: Infinity, | ||||
}, | }, | ||||
}, | }, | ||||
*/ | |||||
}, | }, | ||||
игрок: { | игрок: { | ||||
объект: "рт", | |||||
//объект: "кирпич", | |||||
объект: "кирпич", | |||||
скорость: [5, 12.5], | скорость: [5, 12.5], | ||||
клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"], | клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"], | ||||
}, | }, | ||||
слежение: { | слежение: { | ||||
/* | |||||
колобок: { | колобок: { | ||||
объект: "кирпич", | объект: "кирпич", | ||||
изображение: "колобок", | изображение: "колобок", | ||||
смещение: [-35, -60], | смещение: [-35, -60], | ||||
скорость: 1, | скорость: 1, | ||||
}, | }, | ||||
*/ | |||||
камера: { | камера: { | ||||
объект: "рт", | |||||
//объект: "кирпич", | |||||
объект: "кирпич", | |||||
скорость: 0.1, | скорость: 0.1, | ||||
}, | }, | ||||
}, | }, | ||||
маскиПрыжков: { | маскиПрыжков: { | ||||
игрок: { | игрок: { | ||||
объект: "рт", | |||||
//объект: "кирпич", | |||||
объект: "кирпич", | |||||
скорость: -1, | скорость: -1, | ||||
маски: [1, 1|2], | маски: [1, 1|2], | ||||
}, | }, | ||||
@@ -502,6 +503,7 @@ console.debug("событие", событие); | |||||
объекты: ["кирпич", "паук1"], | объекты: ["кирпич", "паук1"], | ||||
событие: "игрокПаук1", | событие: "игрокПаук1", | ||||
}, | }, | ||||
/* | |||||
проверкаСенсораИгрокаРТ: { | проверкаСенсораИгрокаРТ: { | ||||
объекты: ["рт", "паук1"], | объекты: ["рт", "паук1"], | ||||
событие: "игрокПаукРТ", | событие: "игрокПаукРТ", | ||||
@@ -514,6 +516,7 @@ console.debug("событие", событие); | |||||
объекты: ["рт2", "паук1"], | объекты: ["рт2", "паук1"], | ||||
событие: "игрокПаукРТ2", | событие: "игрокПаукРТ2", | ||||
}, | }, | ||||
*/ | |||||
}, | }, | ||||
движение: { | движение: { | ||||
паук1: { | паук1: { | ||||