Browse Source

-рт

master
parent
commit
08e8c37052
5 changed files with 191 additions and 18 deletions
  1. +4
    -2
      130.изображения.js
  2. +168
    -0
      150.тела.js
  3. +1
    -3
      320.игрок.js
  4. +7
    -5
      700.пуск.js
  5. +11
    -8
      800.пример.json.js

+ 4
- 2
130.изображения.js View File

@@ -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"])
{ {


+ 168
- 0
150.тела.js View File

@@ -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(параметр, значение);
}

+ 1
- 3
320.игрок.js View File

@@ -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);


+ 7
- 5
700.пуск.js View File

@@ -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()
{ {
/**/мир.ограничитель.обновить();
/**/мир.рт.обновить();
/**///мир.ограничитель.обновить();
/**///мир.рт.обновить();
мир.физика.обновить(); мир.физика.обновить();
//мир.тела.обновить();
мир.объекты.обновить(); мир.объекты.обновить();
мир.игрок.обновить(); мир.игрок.обновить();
мир.слежение.обновить(); мир.слежение.обновить();


+ 11
- 8
800.пример.json.js View File

@@ -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: {


Loading…
Cancel
Save