Compare commits
117 Commits
95b92bee5a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| bdd825bde2 | |||
| a1ec3fe69d | |||
| d0c08457a5 | |||
| d6a154cc80 | |||
| 255daba5ae | |||
| da70e54452 | |||
| d8a1d7b7bb | |||
| 8d31c83080 | |||
| 1a7bda4ffd | |||
| b7fd306363 | |||
| 9843675335 | |||
| 859c6f3f06 | |||
| 6c8ecdf0dc | |||
| e5cc0f1a65 | |||
| c1da3973ce | |||
| e8fe7e59f6 | |||
| 08e8c37052 | |||
| e65485a054 | |||
| 677b222aca | |||
| 80c9891004 | |||
| 8d61cfbf64 | |||
| 7dacf10d64 | |||
| 86daf65ab1 | |||
| 21a892188c | |||
| fde0a9ed9d | |||
| 5dbf805d83 | |||
| a25bd81dbc | |||
| dc25add211 | |||
| b6be9658a5 | |||
| 975f8a16bb | |||
| 45d6318a33 | |||
| 22846b7a46 | |||
| ced225cf11 | |||
| b2efb401ff | |||
| 0faad3eb3b | |||
| 246c5efa2e | |||
| 67b096d583 | |||
| 2cb0ec93a5 | |||
| e89371487f | |||
| 1ca6848df3 | |||
| f5a18c1ab0 | |||
| 9d50408129 | |||
| 56e0eba53a | |||
| 7eb5195fb3 | |||
| 6f5e85d20f | |||
| cbecb7198d | |||
| d815d923f9 | |||
| af43346e33 | |||
| c173f0f6ae | |||
| 088b978343 | |||
| f934a4f86c | |||
| e83250e402 | |||
| dc40a64bd3 | |||
| dda5429cf4 | |||
| 0385e709e7 | |||
| 675a4babd7 | |||
| 9b3a5d5e55 | |||
| 0b5431698b | |||
| 777bca030d | |||
| 99129cc494 | |||
| c2ec518585 | |||
| db1a47f1a9 | |||
| a4528580fb | |||
| 4c316afe91 | |||
| 47ebe996f6 | |||
| bf6d8a06cd | |||
| 67f342be08 | |||
| ba76bdbd7d | |||
| 83ce75d2ac | |||
| 71076d20c0 | |||
| 54163c7af4 | |||
| d72023067d | |||
| 76a8f2963b | |||
| c76e2e777e | |||
| a095f0687f | |||
| 4847c4355e | |||
| abeb6dd036 | |||
| 61d1a208c2 | |||
| 9857f7ff06 | |||
| 8986ba14ab | |||
| e69b1071ab | |||
| eb51faa1b9 | |||
| 234087b53f | |||
| d6a8106802 | |||
| ff87f2216b | |||
| e3228caf50 | |||
| 6b4ebb05e2 | |||
| 834cf4d957 | |||
| a122340552 | |||
| 34ddba866d | |||
| 243f37c99e | |||
| 8bdc3df7c3 | |||
| d14ee5e93b | |||
| b50338f272 | |||
| 51784650e1 | |||
| 6d64bfd7cb | |||
| 53edfed756 | |||
| 8ff1a6cbff | |||
| 932dcc410a | |||
| cb89c09cea | |||
| 3e1357df7d | |||
| f24784c383 | |||
| 20d379dce8 | |||
| e1c5a43bf8 | |||
| 43fa2e1f93 | |||
| 0eca32f3c1 | |||
| e2a4e597d6 | |||
| 72638b114a | |||
| 652e08f745 | |||
| 5fd3a95890 | |||
| 4e37d55650 | |||
| 1cd31b49f5 | |||
| f292b37207 | |||
| 096468aa49 | |||
| f19ce56969 | |||
| 0c0ae8265b | |||
| bc93363aac |
@@ -1,11 +0,0 @@
|
||||
/*
|
||||
мир.клавиши = {
|
||||
};
|
||||
*/
|
||||
|
||||
window.addEventListener("keydown", function(o) {
|
||||
console.debug("keydown", o);
|
||||
});
|
||||
window.addEventListener("keyup", function(o) {
|
||||
console.debug("keyup", o);
|
||||
});
|
||||
@@ -1,10 +0,0 @@
|
||||
мир.обновить = function()
|
||||
{
|
||||
мир.физика.обновить();
|
||||
мир.объекты.обновить();
|
||||
requestAnimationFrame(мир.обновить);
|
||||
};
|
||||
|
||||
// Запустить.
|
||||
мир.физика.создать();
|
||||
мир.обновить();
|
||||
@@ -1,23 +0,0 @@
|
||||
мир.разобрать({
|
||||
заголовок: "К 0.10.0",
|
||||
объекты: {
|
||||
пол: {
|
||||
x: 1000,
|
||||
y: 300,
|
||||
ширина: 2000,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg) repeat-x",
|
||||
},
|
||||
},
|
||||
колобок: {
|
||||
x: 400,
|
||||
y: 150,
|
||||
ширина: 60,
|
||||
высота: 60,
|
||||
статика: false,
|
||||
вид: {
|
||||
background: "url(р/колобок/колобок_неподвижен.png) no-repeat scroll 50% 0% / contain",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -52,3 +52,35 @@
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
мир.задать = function(словарь, полныйКлюч, значение) {
|
||||
var путь = полныйКлюч.split(".");
|
||||
var пройти = путь.length - 1;
|
||||
var вложенность = словарь;
|
||||
for (var номер = 0; номер < пройти; ++номер)
|
||||
{
|
||||
var ключ = путь[номер];
|
||||
if (!(ключ in вложенность))
|
||||
{
|
||||
вложенность[ключ] = {};
|
||||
вложенность = вложенность[ключ];
|
||||
}
|
||||
}
|
||||
// Значение в конце вложенности.
|
||||
var ключ = путь[пройти];
|
||||
вложенность[ключ] = значение;
|
||||
};
|
||||
|
||||
мир.синхронизироватьЭлементТело = function(элемент, тело) {
|
||||
if (тело.isSleeping)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
let x = тело.position.x - элемент.offsetWidth / 2;
|
||||
let y = тело.position.y - элемент.offsetHeight / 2;
|
||||
let угол = тело.angle;
|
||||
элемент.style.transform = `translate(${x}px, ${y}px) rotate(${угол}rad)`;
|
||||
|
||||
return true;
|
||||
};
|
||||
@@ -2,6 +2,9 @@
|
||||
движок: null,
|
||||
настройки: {
|
||||
enableSleeping: true,
|
||||
gravity: {
|
||||
y: 2,
|
||||
},
|
||||
},
|
||||
создать: function() {
|
||||
мир.физика.движок = Matter.Engine.create(мир.физика.настройки);
|
||||
@@ -10,4 +13,3 @@
|
||||
Matter.Engine.update(мир.физика.движок);
|
||||
},
|
||||
};
|
||||
|
||||
97
130.изображения.js
Normal file
@@ -0,0 +1,97 @@
|
||||
function Изображения(корень)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
ширина: 100,
|
||||
высота: 100,
|
||||
угол: 0,
|
||||
};
|
||||
this.задано = {};
|
||||
this.элементы = {};
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
this.обновитьЭлемент(имя, свойство, значение);
|
||||
};
|
||||
|
||||
this.создатьИлиПолучитьЭлемент = function(имя)
|
||||
{
|
||||
var эл = this.элементы[имя];
|
||||
if (эл)
|
||||
{
|
||||
return эл;
|
||||
}
|
||||
|
||||
var ум = this.умолчание;
|
||||
эл = document.createElement("div");
|
||||
эл.id = `изображения-${имя}`;
|
||||
эл.style.position = "absolute";
|
||||
эл.style.display = "block";
|
||||
// Свойства по умолчанию.
|
||||
эл.style.width = `${ум.ширина}px`;
|
||||
эл.style.height = `${ум.высота}px`;
|
||||
эл.style.transform = `translate(${ум.x}px, ${ум.y}px) rotate(${ум.угол}rad)`;
|
||||
|
||||
this.элементы[имя] = эл;
|
||||
корень.appendChild(эл);
|
||||
return эл;
|
||||
};
|
||||
|
||||
this.обновитьЭлемент = function(имя, свойство, значение)
|
||||
{
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
var за = this.задано[имя];
|
||||
var эл = this.создатьИлиПолучитьЭлемент(имя);
|
||||
|
||||
if (свойство == "ширина")
|
||||
{
|
||||
эл.style.width = `${за.ширина}px`;
|
||||
}
|
||||
else if (свойство == "высота")
|
||||
{
|
||||
эл.style.height = `${за.высота}px`;
|
||||
}
|
||||
else if (
|
||||
(свойство == "x") ||
|
||||
(свойство == "y") ||
|
||||
(свойство == "угол") ||
|
||||
(свойство == "вид.transform")
|
||||
) {
|
||||
var ум = this.умолчание;
|
||||
var x = за.x ? за.x : ум.x;
|
||||
var y = за.y ? за.y : ум.y;
|
||||
var угол = за.угол ? за.угол : ум.угол;
|
||||
this.обновитьРасположение(имя, x, y, угол);
|
||||
}
|
||||
else if (свойство.startsWith("вид"))
|
||||
{
|
||||
var параметр = свойство.substring(4);
|
||||
эл.style.setProperty(параметр, значение);
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьРасположение = function(имя, x, y, угол)
|
||||
{
|
||||
var за = this.задано[имя];
|
||||
var эл = this.элементы[имя];
|
||||
var transform = `translate(${x}px, ${y}px) rotate(${угол}deg) `;
|
||||
if (за["вид.transform"])
|
||||
{
|
||||
transform += за["вид.transform"];
|
||||
}
|
||||
эл.style.transform = transform;
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
132
150.тела.js
Normal file
@@ -0,0 +1,132 @@
|
||||
function Тела(физмир)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
ширина: 40,
|
||||
высота: 20,
|
||||
угол: 0,
|
||||
часть: false,
|
||||
физика: {
|
||||
isStatic: true,
|
||||
},
|
||||
};
|
||||
|
||||
this.задано = {};
|
||||
this.тела = {};
|
||||
this.имена = {};
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
this.пересоздатьТело(имя);
|
||||
};
|
||||
|
||||
this.пересоздатьТело = function(имя) {
|
||||
// Удаляем старое тело.
|
||||
if (имя in this.тела)
|
||||
{
|
||||
var тело = this.тела[имя];
|
||||
delete this.имена[тело.id];
|
||||
// Всегда удаляем из мира:
|
||||
// * тело не часть;
|
||||
// * тело было не частью, а потом стало частью.
|
||||
Matter.Composite.remove(физмир, тело);
|
||||
}
|
||||
|
||||
var за = this.задано[имя];
|
||||
var ум = this.умолчание;
|
||||
var x = (за.x != null) ? за.x : ум.x;
|
||||
var y = (за.y != null) ? за.y : ум.y;
|
||||
var ширина = за.ширина ? за.ширина : ум.ширина;
|
||||
var высота = за.высота ? за.высота : ум.высота;
|
||||
// Переводим x,y из левого верхнего угла в центр.
|
||||
/**/console.debug("Тела.пересоздатьТ-1 имя:", имя, "x/y/ширина/высота:", x, y, ширина, высота);
|
||||
x = x + ширина / 2.0;
|
||||
y = y + высота / 2.0;
|
||||
/**///console.debug("Тела.пересоздатьТ-2 имя:", имя, "x/y/ширина/высота:", x, y, ширина, высота);
|
||||
// Параметры тела.
|
||||
var параметры = {};
|
||||
Object.assign(параметры, ум.физика);
|
||||
for (var путь in за)
|
||||
{
|
||||
if (путь.startsWith("физика"))
|
||||
{
|
||||
var свойство = путь.slice(7);
|
||||
мир.задать(параметры, свойство, за[путь]);
|
||||
}
|
||||
}
|
||||
|
||||
var тело = null;
|
||||
// Создаём новое составное тело.
|
||||
if (за["части.0"])
|
||||
{
|
||||
параметры["parts"] = this.телаЧастей(this.именаЧастей(за));
|
||||
тело = Matter.Body.create(параметры);
|
||||
}
|
||||
// Создаём новое несоставное тело.
|
||||
else
|
||||
{
|
||||
тело = Matter.Bodies.rectangle(x, y, ширина, высота, параметры);
|
||||
}
|
||||
this.тела[имя] = тело;
|
||||
this.имена[тело.id] = имя;
|
||||
|
||||
// Добавляем в физический мир, если не часть другого составного мира.
|
||||
var часть = за.часть ? за.часть : ум.часть;
|
||||
if (!часть)
|
||||
{
|
||||
Matter.Composite.add(физмир, тело);
|
||||
}
|
||||
};
|
||||
|
||||
this.именаЧастей = function(за)
|
||||
{
|
||||
var имена = [];
|
||||
for (var ключ in за)
|
||||
{
|
||||
if (ключ.startsWith("части"))
|
||||
{
|
||||
имена.push(за[ключ]);
|
||||
}
|
||||
}
|
||||
return имена;
|
||||
};
|
||||
|
||||
this.телаЧастей = function(имена)
|
||||
{
|
||||
var тела = [];
|
||||
for (var н in имена)
|
||||
{
|
||||
var имя = имена[н];
|
||||
var тело = this.тела[имя];
|
||||
тела.push(тело);
|
||||
}
|
||||
return тела;
|
||||
};
|
||||
|
||||
this.отладить = function()
|
||||
{
|
||||
console.debug("Тела.отладить. НАЧАЛО");
|
||||
for (var имя in this.тела)
|
||||
{
|
||||
var тело = this.тела[имя];
|
||||
console.debug("тело имя/id/позиция:", имя, тело.id, тело.position);
|
||||
}
|
||||
console.debug("Тела.отладить. КОНЕЦ");
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
мир.объекты = {
|
||||
умолчание: {
|
||||
x: 100,
|
||||
y: 100,
|
||||
x: 0,
|
||||
y: 0,
|
||||
ширина: 40,
|
||||
высота: 20,
|
||||
статика: true,
|
||||
физика: {
|
||||
isStatic: true,
|
||||
},
|
||||
},
|
||||
задано: {},
|
||||
тела: {},
|
||||
имена: {},
|
||||
элементы: {},
|
||||
свойстваТела: ["x", "y", "ширина", "высота", "статика"],
|
||||
обновить: обновитьОбъекты,
|
||||
свойстваТела: ["x", "y", "ширина", "высота", "физика"],
|
||||
};
|
||||
|
||||
|
||||
@@ -26,43 +28,51 @@
|
||||
var имя = путь[1];
|
||||
var свойство = путь[2];
|
||||
|
||||
сохранитьЗаданноеЗначение(имя, свойство, значение);
|
||||
пересоздатьТело(имя, свойство, значение);
|
||||
обновитьЭлемент(имя, свойство, значение);
|
||||
обновитьВидЭлемента(путь, имя, свойство, значение);
|
||||
if (!(имя in мир.объекты.задано))
|
||||
{
|
||||
мир.объекты.задано[имя] = {};
|
||||
}
|
||||
var свойствоПуть = путь.slice(2).join(".");
|
||||
мир.объекты.задано[имя][свойствоПуть] = значение;
|
||||
|
||||
мир.объекты.пересоздатьТело(имя, свойство);
|
||||
мир.объекты.обновитьЭлемент(имя, свойство, значение);
|
||||
мир.объекты.обновитьВидЭлемента(путь, имя, свойство, значение);
|
||||
});
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
function обновитьОбъекты()
|
||||
мир.объекты.обновить = function()
|
||||
{
|
||||
for (var имя in мир.объекты.тела)
|
||||
{
|
||||
var тело = мир.объекты.тела[имя];
|
||||
if (тело.isSleeping)
|
||||
var элемент = мир.объекты.элементы[имя];
|
||||
if (!тело || !элемент)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var элемент = мир.объекты.элементы[имя];
|
||||
let x = тело.position.x - элемент.offsetWidth / 2;
|
||||
let y = тело.position.y - элемент.offsetHeight / 2;
|
||||
let угол = тело.angle;
|
||||
элемент.style.transform = `translate(${x}px, ${y}px) rotate(${угол}rad)`;
|
||||
}
|
||||
}
|
||||
var засинхрили = мир.синхронизироватьЭлементТело(элемент, тело);
|
||||
|
||||
function сохранитьЗаданноеЗначение(имя, свойство, значение)
|
||||
// Учесть значения transform из JSON-JS.
|
||||
if (засинхрили)
|
||||
{
|
||||
if (!(имя in мир.объекты.задано))
|
||||
var transform = мир.объекты.задано[имя]["вид.transform"];
|
||||
if (transform)
|
||||
{
|
||||
мир.объекты.задано[имя] = {};
|
||||
элемент.style.transform += transform;
|
||||
}
|
||||
мир.объекты.задано[имя][свойство] = значение;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function пересоздатьТело(имя, свойство, значение)
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.объекты.пересоздатьТело = function(имя, свойство)
|
||||
{
|
||||
if (!мир.объекты.свойстваТела.includes(свойство))
|
||||
{
|
||||
@@ -74,25 +84,41 @@ function пересоздатьТело(имя, свойство, значени
|
||||
{
|
||||
var тело = мир.объекты.тела[имя];
|
||||
Matter.Composite.remove(мир.физика.движок.world, тело);
|
||||
delete мир.объекты.имена[тело.id];
|
||||
}
|
||||
// Пересоздать физическое тело.
|
||||
var за = мир.объекты.задано[имя];
|
||||
var ум = мир.объекты.умолчание;
|
||||
|
||||
var x = за["x"] ? за["x"] : ум["x"];
|
||||
var y = за["y"] ? за["y"] : ум["y"];
|
||||
var ширина = за["ширина"] ? за["ширина"] : ум["ширина"];
|
||||
var высота = за["высота"] ? за["высота"] : ум["высота"];
|
||||
var свойства = {
|
||||
isStatic: ("статика" in за) ? за.статика : ум.статика,
|
||||
};
|
||||
|
||||
var тело = Matter.Bodies.rectangle(x, y, ширина, высота, свойства);
|
||||
Matter.Composite.add(мир.физика.движок.world, тело);
|
||||
мир.объекты.тела[имя] = тело;
|
||||
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);
|
||||
мир.задать(физика, свойство, за[путь]);
|
||||
}
|
||||
}
|
||||
|
||||
function обновитьЭлемент(имя, свойство, значение)
|
||||
var тело = Matter.Bodies.rectangle(x, y, ширина, высота, физика);
|
||||
Matter.Composite.add(мир.физика.движок.world, тело);
|
||||
мир.объекты.тела[имя] = тело;
|
||||
мир.объекты.имена[тело.id] = имя;
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.объекты.обновитьЭлемент = function(имя, свойство, значение)
|
||||
{
|
||||
var за = мир.объекты.задано[имя];
|
||||
var ум = мир.объекты.умолчание;
|
||||
@@ -104,7 +130,7 @@ function обновитьЭлемент(имя, свойство, значени
|
||||
элемент.style.position = "absolute";
|
||||
элемент.style.display = "block";
|
||||
элемент.style.transformOrigin = "center";
|
||||
document.body.appendChild(элемент);
|
||||
document.getElementById("корень").appendChild(элемент);
|
||||
мир.объекты.элементы[имя] = элемент;
|
||||
// Свойства по умолчанию.
|
||||
элемент.style.width = `${ум.ширина}px`;
|
||||
@@ -125,7 +151,11 @@ function обновитьЭлемент(имя, свойство, значени
|
||||
}
|
||||
}
|
||||
|
||||
function обновитьВидЭлемента(путь, имя, свойство, значение)
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.объекты.обновитьВидЭлемента = function(путь, имя, свойство, значение)
|
||||
{
|
||||
if (свойство != "вид")
|
||||
{
|
||||
@@ -135,5 +165,4 @@ function обновитьВидЭлемента(путь, имя, свойств
|
||||
var элемент = мир.объекты.элементы[имя];
|
||||
var параметр = путь[3];
|
||||
элемент.style.setProperty(параметр, значение);
|
||||
console.debug(имя, свойство, параметр, значение);
|
||||
}
|
||||
29
180.ввод.js
Normal file
@@ -0,0 +1,29 @@
|
||||
мир.ввод = {
|
||||
клавиши: {},
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
window.addEventListener("keydown", function(o) {
|
||||
мир.ввод.обработатьКлавишу(o.key, true);
|
||||
});
|
||||
window.addEventListener("keyup", function(o) {
|
||||
мир.ввод.обработатьКлавишу(o.key, false);
|
||||
});
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.ввод.обработатьКлавишу = function(клавиша, нажата)
|
||||
{
|
||||
// Исключаем повторы.
|
||||
if (мир.ввод.клавиши[клавиша] == нажата)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
мир.ввод.клавиши[клавиша] = нажата;
|
||||
};
|
||||
97
200.движение.js
Normal file
@@ -0,0 +1,97 @@
|
||||
function Движение(ключники) {
|
||||
this.создать = function()
|
||||
{
|
||||
this.задано = {};
|
||||
var тут = this;
|
||||
ключники.push(function(ключ, путь, значение) {
|
||||
if (!путь[0].startsWith("движение"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
тут.обработатьКлюч(ключ, путь, значение);
|
||||
});
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
for (var имя in this.задано)
|
||||
{
|
||||
var значения = this.задано[имя];
|
||||
for (var свойство in значения)
|
||||
{
|
||||
if (свойство.startsWith("объект"))
|
||||
{
|
||||
var объект = значения[свойство];
|
||||
this.передвинуть(объект, значения);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.передвинуть = function(объект, значения)
|
||||
{
|
||||
var тело = мир.объекты.тела[объект];
|
||||
var скоростьX = значения["скорость.0"];
|
||||
var скоростьY = значения["скорость.1"];
|
||||
var началоX = значения["x.0"];
|
||||
var конецX = значения["x.1"];
|
||||
var началоY = значения["y.0"];
|
||||
var конецY = значения["y.1"];
|
||||
|
||||
if (
|
||||
!тело ||
|
||||
(скоростьX == null) ||
|
||||
(скоростьY == null) ||
|
||||
(началоX == null) ||
|
||||
(началоY == null) ||
|
||||
(конецX == null) ||
|
||||
(конецY == null)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!тело.скоростьX)
|
||||
{
|
||||
тело.скоростьX = скоростьX;
|
||||
}
|
||||
if (!тело.скоростьY)
|
||||
{
|
||||
тело.скоростьY = скоростьY;
|
||||
}
|
||||
|
||||
if (тело.position.x < началоX)
|
||||
{
|
||||
тело.скоростьX = скоростьX;
|
||||
}
|
||||
else if (тело.position.x > конецX)
|
||||
{
|
||||
тело.скоростьX = скоростьX * -1;
|
||||
}
|
||||
|
||||
if (тело.position.y < началоY)
|
||||
{
|
||||
тело.скоростьY = скоростьY;
|
||||
}
|
||||
else if (тело.position.y > конецY)
|
||||
{
|
||||
тело.скоростьY = скоростьY * -1 * мир.физика.движок.gravity.y;
|
||||
}
|
||||
|
||||
Matter.Sleeping.set(тело, false);
|
||||
Matter.Body.setVelocity(тело, { x: тело.скоростьX, y: тело.скоростьY });
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
20
300.события.js
Normal file
@@ -0,0 +1,20 @@
|
||||
мир.события = {
|
||||
обработчики: [],
|
||||
подписать: function(обработчик) {
|
||||
мир.события.обработчики.push(обработчик);
|
||||
},
|
||||
отписать: function(обработчик) {
|
||||
var номер = мир.события.обработчики.indexOf(обработчик);
|
||||
if (номер != -1)
|
||||
{
|
||||
мир.события.обработчики.splice(номер, 1);
|
||||
}
|
||||
},
|
||||
уведомить: function(событие) {
|
||||
for (var номер in мир.события.обработчики)
|
||||
{
|
||||
var обработчик = мир.события.обработчики[номер];
|
||||
обработчик.обработатьСобытие(событие);
|
||||
}
|
||||
},
|
||||
};
|
||||
124
320.игрок.js
Normal file
@@ -0,0 +1,124 @@
|
||||
мир.игрок = {
|
||||
задано: {},
|
||||
прыжок: {
|
||||
статус: 0,
|
||||
время: new Date(),
|
||||
скоростьОтсутствия: 0.0001,
|
||||
},
|
||||
приземление: {
|
||||
скорость: 0,
|
||||
},
|
||||
тело: null,
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.ключники.push(function(ключ, путь, значение){
|
||||
if (!ключ.startsWith("игрок"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var свойство = путь.slice(1).join(".");
|
||||
мир.игрок.задано[свойство] = значение;
|
||||
});
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.игрок.обновить = function() {
|
||||
var тело = мир.объекты.тела[мир.игрок.задано.объект];
|
||||
if (!тело)
|
||||
{
|
||||
тело = мир.тела.тела[мир.игрок.задано.тело];
|
||||
}
|
||||
мир.игрок.тело = тело;
|
||||
if (!мир.игрок.тело)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
мир.игрок.переместить();
|
||||
мир.игрок.отслеживатьПрыжкиПриземления();
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.игрок.переместить = function()
|
||||
{
|
||||
var к = [
|
||||
мир.игрок.задано["клавиши.0"],
|
||||
мир.игрок.задано["клавиши.1"],
|
||||
];
|
||||
var влево = (мир.ввод.клавиши[к[0]] == true);
|
||||
var вправо = (мир.ввод.клавиши[к[1]] == true);
|
||||
|
||||
var скоростьГ = мир.игрок.задано["скорость.0"];
|
||||
var скоростьX = 0;
|
||||
var скоростьВ = мир.игрок.задано["скорость.1"];
|
||||
var скоростьY = (мир.игрок.прыжок.статус == 1) ? -скоростьВ : мир.игрок.тело.velocity.y;
|
||||
|
||||
if (влево)
|
||||
{
|
||||
скоростьX = -скоростьГ;
|
||||
}
|
||||
else if (вправо)
|
||||
{
|
||||
скоростьX = скоростьГ;
|
||||
}
|
||||
|
||||
Matter.Sleeping.set(мир.игрок.тело, false);
|
||||
Matter.Body.setVelocity(мир.игрок.тело, { x: скоростьX, y: скоростьY });
|
||||
};
|
||||
|
||||
|
||||
// // // /
|
||||
|
||||
|
||||
мир.игрок.отслеживатьПрыжкиПриземления = function()
|
||||
{
|
||||
if (мир.игрок.прыжок.статус == 1)
|
||||
{
|
||||
мир.игрок.прыжок.статус = 2;
|
||||
мир.события.уведомить("игрок в прыжке");
|
||||
}
|
||||
var нетДвижения = (Math.abs(мир.игрок.тело.velocity.y) < мир.игрок.прыжок.скоростьОтсутствия);
|
||||
var клавиша = мир.игрок.задано["клавиши.2"];
|
||||
var вверх = (мир.ввод.клавиши[клавиша] == true);
|
||||
if (
|
||||
мир.игрок.прыжок.статус == 0 &&
|
||||
вверх &&
|
||||
нетДвижения
|
||||
) {
|
||||
мир.игрок.прыжок.статус = 1;
|
||||
мир.игрок.приземление.скорость = 0;
|
||||
мир.события.уведомить("игрок начал прыжок");
|
||||
}
|
||||
|
||||
if (мир.игрок.прыжок.статус != 2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var скорость = мир.игрок.тело.velocity.y;
|
||||
if (скорость > мир.игрок.приземление.скорость)
|
||||
{
|
||||
мир.игрок.приземление.скорость = скорость;
|
||||
}
|
||||
|
||||
var сейчас = new Date();
|
||||
var прошло = сейчас - мир.игрок.прыжок.время;
|
||||
if (
|
||||
(прошло > 20) &&
|
||||
нетДвижения
|
||||
) {
|
||||
мир.игрок.прыжок.время = сейчас;
|
||||
мир.игрок.прыжок.статус = 0;
|
||||
мир.события.уведомить("игрок приземлился");
|
||||
}
|
||||
};
|
||||
114
350.слежение.js
Normal file
@@ -0,0 +1,114 @@
|
||||
function Слежение(корень, изображения, тела, объекты)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
смещение: [0, 0],
|
||||
скорость: 1,
|
||||
};
|
||||
this.задано = {};
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
for (var имя in this.задано)
|
||||
{
|
||||
var за = this.задано[имя];
|
||||
if (имя == "камера")
|
||||
{
|
||||
this.расположитьЭлемент(корень, за, this.расположениеКамеры);
|
||||
}
|
||||
else
|
||||
{
|
||||
/**///console.debug("слежение.обновить эл", имя);
|
||||
var изо = изображения.элементы[за["изображение"]];
|
||||
this.расположитьЭлемент(изо, за);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.расположитьЭлемент = function(элемент, за, формула)
|
||||
{
|
||||
var тело = null;
|
||||
if (за["объект"])
|
||||
{
|
||||
тело = объекты.тела[за["объект"]];
|
||||
}
|
||||
else if (за["тело"])
|
||||
{
|
||||
тело = тела.тела[за["тело"]];
|
||||
}
|
||||
|
||||
var ум = this.умолчание;
|
||||
|
||||
// Параметры.
|
||||
var скорость = за.скорость ? за.скорость : ум.скорость;
|
||||
var смещениеX = за["смещение.0"] ? за["смещение.0"] : ум.смещение[0];
|
||||
var смещениеY = за["смещение.1"] ? за["смещение.1"] : ум.смещение[1];
|
||||
|
||||
// Текущая позиция.
|
||||
var x0 = 0;
|
||||
if (элемент.dataset.слежениеX)
|
||||
{
|
||||
x0 = элемент.dataset.слежениеX;
|
||||
}
|
||||
var y0 = 0;
|
||||
if (элемент.dataset.слежениеY)
|
||||
{
|
||||
y0 = элемент.dataset.слежениеY;
|
||||
}
|
||||
|
||||
// Целевая позиция.
|
||||
var x1 = тело.position.x + смещениеX;
|
||||
var y1 = тело.position.y + смещениеY;
|
||||
/**///console.debug("x0/y0:", x0, y0, "x1/y1:", x1, y1);
|
||||
|
||||
// Преобразование целевой позиции.
|
||||
// Сейчас лишь для камеры.
|
||||
if (формула)
|
||||
{
|
||||
var итог = формула(x1, y1);
|
||||
x1 = итог[0];
|
||||
y1 = итог[1];
|
||||
}
|
||||
|
||||
// Устанавливаемая плавно позиция.
|
||||
var x = this.lerp(x0, x1, скорость);
|
||||
var y = this.lerp(y0, y1, скорость);
|
||||
|
||||
элемент.dataset.слежениеX = x;
|
||||
элемент.dataset.слежениеY = y;
|
||||
элемент.style.transform = `translate(${x}px, ${y}px)`;
|
||||
};
|
||||
|
||||
this.расположениеКамеры = function(x, y)
|
||||
{
|
||||
return [
|
||||
window.innerWidth / 2 - x,
|
||||
window.innerHeight / 2 - y,
|
||||
];
|
||||
};
|
||||
|
||||
this.lerp = function(v0, v1, t) {
|
||||
// Убираем мельтешение.
|
||||
var delta = Math.abs(v0 - v1);
|
||||
if (delta < 1) {
|
||||
return v0;
|
||||
}
|
||||
return v0 * (1 - t) + v1 * t;
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
};
|
||||
63
360.маскиПрыжков.js
Normal file
@@ -0,0 +1,63 @@
|
||||
мир.маскиПрыжков = {
|
||||
задано: {},
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.ключники.push(function(ключ, путь, значение){
|
||||
if (!путь[0].startsWith("маскиПрыжков"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
|
||||
if (!мир.маскиПрыжков.задано[имя])
|
||||
{
|
||||
мир.маскиПрыжков.задано[имя] = {};
|
||||
}
|
||||
мир.маскиПрыжков.задано[имя][свойство] = значение;
|
||||
});
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.маскиПрыжков.обновить = function()
|
||||
{
|
||||
var за = мир.маскиПрыжков.задано;
|
||||
|
||||
for (var имя in за)
|
||||
{
|
||||
var з = за[имя];
|
||||
var объект = з["объект"];
|
||||
var имяТела = з["тело"];
|
||||
var скорость = з["скорость"];
|
||||
var маскаДо = з["маски.0"];
|
||||
var маскаПосле = з["маски.1"];
|
||||
if ((!объект && !имяТела) || (скорость == null) || (маскаДо == null) || (маскаПосле == null))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var тело = null;
|
||||
if (объект)
|
||||
{
|
||||
тело = мир.объекты.тела[объект];
|
||||
}
|
||||
else if (имяТела)
|
||||
{
|
||||
тело = мир.тела.тела[имяТела];
|
||||
}
|
||||
if (!тело)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var маска = (тело.velocity.y < скорость) ? маскаДо : маскаПосле;
|
||||
тело.collisionFilter.mask = маска;
|
||||
}
|
||||
};
|
||||
72
380.звуки.js
Normal file
@@ -0,0 +1,72 @@
|
||||
function Звуки(ключники, события) {
|
||||
this.создать = function() {
|
||||
this.задано = {};
|
||||
this.аудио = {};
|
||||
события.подписать(this);
|
||||
var тут = this;
|
||||
ключники.push(function(ключ, путь, значение) {
|
||||
тут.обработатьКлюч(ключ, путь, значение);
|
||||
});
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение) {
|
||||
if (!путь[0].startsWith("звуки"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие) {
|
||||
for (var имя in this.задано)
|
||||
{
|
||||
var значения = this.задано[имя];
|
||||
if (!значения.файл)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
for (var свойство in значения)
|
||||
{
|
||||
if (свойство.startsWith("события"))
|
||||
{
|
||||
var значение = значения[свойство];
|
||||
if (событие == значение)
|
||||
{
|
||||
this.воспроизвести(значения.файл, значения.повторять);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.воспроизвести = function(файл, повторять)
|
||||
{
|
||||
if (!this.аудио[файл])
|
||||
{
|
||||
this.аудио[файл] = new Audio(файл);
|
||||
}
|
||||
var звук = this.аудио[файл];
|
||||
звук.pause();
|
||||
звук.currentTime = 0;
|
||||
звук.play();
|
||||
|
||||
if (повторять)
|
||||
{
|
||||
звук.onended = function() {
|
||||
звук.play();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
73
400.столкновения.js
Normal file
@@ -0,0 +1,73 @@
|
||||
мир.столкновения = {
|
||||
задано: {},
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.ключники.push(function(ключ, путь, значение){
|
||||
if (!путь[0].startsWith("столкновения"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
|
||||
if (!мир.столкновения.задано[имя])
|
||||
{
|
||||
мир.столкновения.задано[имя] = {};
|
||||
}
|
||||
мир.столкновения.задано[имя][свойство] = значение;
|
||||
});
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.столкновения.создать = function()
|
||||
{
|
||||
Matter.Events.on(мир.физика.движок, "collisionActive", мир.столкновения.обработать);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
мир.столкновения.обработать = function(событие)
|
||||
{
|
||||
var за = мир.столкновения.задано;
|
||||
|
||||
for (var имя in за)
|
||||
{
|
||||
var ст = за[имя];
|
||||
var имя1 = ст["объекты.0"];
|
||||
var имя2 = ст["объекты.1"];
|
||||
var имя2тело = ст["тела.0"];
|
||||
if (!имя1 || (!имя2 && !имя2тело) || !ст.событие)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var пары = событие.pairs;
|
||||
for (var номер in пары)
|
||||
{
|
||||
var пара = пары[номер];
|
||||
var п1 = мир.объекты.имена[пара.bodyA.id];
|
||||
var п2 = мир.объекты.имена[пара.bodyB.id];
|
||||
var п2тело = мир.тела.имена[пара.bodyB.id];
|
||||
if (!п2)
|
||||
{
|
||||
п2 = п2тело;
|
||||
}
|
||||
if (
|
||||
!((имя1 == п1) && (имя2 == п2)) &&
|
||||
!((имя1 == п2) && (имя2 == п1))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
мир.события.уведомить(ст.событие);
|
||||
}
|
||||
}
|
||||
};
|
||||
39
666.ограничитель.js
Normal file
@@ -0,0 +1,39 @@
|
||||
function Ограничитель() {
|
||||
this.создать = function()
|
||||
{
|
||||
this.ограничитель = null;
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
if (this.ограничитель || !мир.игрок.тело)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.ограничитель = true;
|
||||
this.создатьОграничитель();
|
||||
};
|
||||
|
||||
this.создатьОграничитель = function()
|
||||
{
|
||||
var ф2 = {
|
||||
isSensor: true,
|
||||
isStatic: false,
|
||||
inertia: Infinity,
|
||||
density: 0.0000001,
|
||||
};
|
||||
|
||||
var тело2 = Matter.Bodies.rectangle(1170, 350, 40, 40, ф2);
|
||||
|
||||
var x = мир.игрок.тело.position.x;
|
||||
var y = мир.игрок.тело.position.y - 50;
|
||||
Matter.Body.setPosition(тело2, { x: x, y: y });
|
||||
//Matter.Body.setParts(мир.игрок.тело, [тело2]);
|
||||
console.debug("создан compound");
|
||||
//мир.игрок.тело.collisionFilter.mask = 1|2;
|
||||
};
|
||||
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
72
667.ручноетело.js
Normal file
@@ -0,0 +1,72 @@
|
||||
function РучноеТело() {
|
||||
this.настроить = function()
|
||||
{
|
||||
if (this.настроено)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.настроено = true;
|
||||
|
||||
// 1.
|
||||
this.тело1 = Matter.Bodies.rectangle(125, 300, 40, 40, { isSensor: true });
|
||||
|
||||
this.элемент1 = document.createElement("div");
|
||||
document.getElementById("корень").appendChild(this.элемент1);
|
||||
this.элемент1.style.position = "absolute";
|
||||
this.элемент1.style.display = "block";
|
||||
this.элемент1.style.transformOrigin = "center";
|
||||
this.элемент1.style.width = `40px`;
|
||||
this.элемент1.style.height = `40px`;
|
||||
this.элемент1.style.setProperty("background", "url(р/отладка/основа.jpg)");
|
||||
this.элемент1.style.setProperty("z-index", "100");
|
||||
|
||||
// 2.
|
||||
this.тело2 = Matter.Bodies.rectangle(55, 300, 40, 40, { inertia: Infinity });
|
||||
|
||||
this.элемент2 = document.createElement("div");
|
||||
document.getElementById("корень").appendChild(this.элемент2);
|
||||
this.элемент2.style.position = "absolute";
|
||||
this.элемент2.style.display = "block";
|
||||
this.элемент2.style.transformOrigin = "center";
|
||||
this.элемент2.style.width = `40px`;
|
||||
this.элемент2.style.height = `40px`;
|
||||
this.элемент2.style.setProperty("background", "url(р/отладка/основа.jpg)");
|
||||
this.элемент2.style.setProperty("z-index", "100");
|
||||
|
||||
/*
|
||||
Matter.Composite.add(мир.физика.движок.world, this.тело1);
|
||||
Matter.Composite.add(мир.физика.движок.world, this.тело2);
|
||||
мир.объекты.тела["рт"] = this.тело2;
|
||||
this.тело = this.тело2;
|
||||
*/
|
||||
|
||||
// Compound.
|
||||
this.тело = Matter.Body.create({
|
||||
parts: [this.тело1, this.тело2],
|
||||
inertia: Infinity,
|
||||
});
|
||||
Matter.Composite.add(мир.физика.движок.world, this.тело);
|
||||
мир.объекты.тела["рт"] = this.тело;
|
||||
|
||||
мир.объекты.тела["рт1"] = this.тело1;
|
||||
мир.объекты.имена[this.тело1.id] = "рт1";
|
||||
мир.объекты.тела["рт2"] = this.тело2;
|
||||
мир.объекты.имена[this.тело2.id] = "рт2";
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
this.настроить();
|
||||
if (!this.тело)
|
||||
{
|
||||
return;
|
||||
}
|
||||
мир.синхронизироватьЭлементТело(this.элемент1, this.тело1);
|
||||
мир.синхронизироватьЭлементТело(this.элемент2, this.тело2);
|
||||
};
|
||||
|
||||
this.отладить = function()
|
||||
{
|
||||
console.debug("РТ.отладить. позиции тело/тело1/тело2:", this.тело.position, this.тело1.position, this.тело2.position);
|
||||
};
|
||||
}
|
||||
56
700.пуск.js
Normal file
@@ -0,0 +1,56 @@
|
||||
function Пуск()
|
||||
{
|
||||
this.запустить = function()
|
||||
{
|
||||
var корень = document.getElementById("корень");
|
||||
|
||||
мир.физика.создать();
|
||||
мир.изображения = new Изображения(корень);
|
||||
мир.тела = new Тела(мир.физика.движок.world);
|
||||
мир.слежение = new Слежение(корень, мир.изображения, мир.тела, мир.объекты);
|
||||
мир.столкновения.создать();
|
||||
мир.звуки = new Звуки(мир.ключники, мир.события);
|
||||
мир.движение = new Движение(мир.ключники);
|
||||
|
||||
/**///мир.рт = new РучноеТело();
|
||||
|
||||
this.настроитьОбработкуКлючей();
|
||||
this.обновить();
|
||||
};
|
||||
|
||||
this.настроитьОбработкуКлючей = function()
|
||||
{
|
||||
мир.ключники.push(function(ключ, путь, значение) {
|
||||
if (путь[0] == "изображения")
|
||||
{
|
||||
мир.изображения.обработатьКлюч(ключ, путь, значение);
|
||||
}
|
||||
else if (путь[0] == "тела")
|
||||
{
|
||||
мир.тела.обработатьКлюч(ключ, путь, значение);
|
||||
}
|
||||
else if (путь[0] == "слежение")
|
||||
{
|
||||
мир.слежение.обработатьКлюч(ключ, путь, значение);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
мир.физика.обновить();
|
||||
мир.объекты.обновить();
|
||||
мир.игрок.обновить();
|
||||
мир.слежение.обновить();
|
||||
мир.маскиПрыжков.обновить();
|
||||
мир.движение.обновить();
|
||||
var тут = this;
|
||||
requestAnimationFrame(function() {
|
||||
тут.обновить();
|
||||
});
|
||||
|
||||
/**///мир.рт.обновить();
|
||||
};
|
||||
}
|
||||
|
||||
мир.пуск = new Пуск();
|
||||
783
800.пример.json.js
Normal file
@@ -0,0 +1,783 @@
|
||||
// // // //
|
||||
// Основа избы
|
||||
// // // //
|
||||
|
||||
|
||||
мир.разобрать({
|
||||
заголовок: "Колобку здесь быть",
|
||||
изображения: {
|
||||
дом: {
|
||||
ширина: 2000,
|
||||
высота: 600,
|
||||
вид: {
|
||||
background: "url(р/сцены/изба.jpg)",
|
||||
},
|
||||
},
|
||||
},
|
||||
объекты: {
|
||||
полСлева: {
|
||||
x: 0,
|
||||
y: 580,
|
||||
ширина: 355,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
},
|
||||
/*
|
||||
полКрышки: {
|
||||
x: 357,
|
||||
y: 580,
|
||||
ширина: 135,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
},
|
||||
*/
|
||||
полСправа: {
|
||||
x: 495,
|
||||
y: 580,
|
||||
ширина: 1505,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
},
|
||||
стол: {
|
||||
x: 1253,
|
||||
y: 420,
|
||||
ширина: 610,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
подоконник: {
|
||||
x: 1673,
|
||||
y: 375,
|
||||
ширина: 200,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
angle: -0.0698,
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
звуки: {
|
||||
изба: {
|
||||
события: ["вошли в избу"],
|
||||
файл: "р/звуки/387922__setuniman__scheming-1o95.mp3",
|
||||
повторять: true,
|
||||
останов: ["покинули избу"],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
|
||||
// // // //
|
||||
// Игрок
|
||||
// // // //
|
||||
|
||||
|
||||
мир.разобрать({
|
||||
изображения: {
|
||||
колобок: {
|
||||
ширина: 70,
|
||||
высота: 70,
|
||||
вид: {
|
||||
background: "url(р/колобок/колобок_неподвижен.png)",
|
||||
//"z-index": 10,
|
||||
},
|
||||
},
|
||||
изоСенсорИгрока: {
|
||||
ширина: 70,
|
||||
высота: 70,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
},
|
||||
},
|
||||
изоПодошваИгрока: {
|
||||
ширина: 40,
|
||||
высота: 20,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
},
|
||||
},
|
||||
},
|
||||
тела: {
|
||||
подошваИгрока: {
|
||||
x: 100,
|
||||
y: 450,
|
||||
ширина: 40,
|
||||
высота: 20,
|
||||
часть: true,
|
||||
физика: {
|
||||
isStatic: false,
|
||||
inertia: Infinity,
|
||||
},
|
||||
},
|
||||
сенсорИгрока: {
|
||||
x: 100,
|
||||
y: 400,
|
||||
ширина: 70,
|
||||
высота: 70,
|
||||
часть: true,
|
||||
физика: {
|
||||
isSensor: true,
|
||||
isStatic: false,
|
||||
},
|
||||
},
|
||||
игрок: {
|
||||
части: ["подошваИгрока", "сенсорИгрока"],
|
||||
физика: {
|
||||
isStatic: false,
|
||||
inertia: Infinity,
|
||||
},
|
||||
},
|
||||
},
|
||||
объекты: {
|
||||
/*
|
||||
кирпич: {
|
||||
x: 100,
|
||||
y: 350,
|
||||
высота: 20,
|
||||
ширина: 40,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
//display: "none",
|
||||
},
|
||||
физика: {
|
||||
isStatic: false,
|
||||
inertia: Infinity,
|
||||
},
|
||||
},
|
||||
*/
|
||||
},
|
||||
игрок: {
|
||||
//объект: "кирпич",
|
||||
тело: "игрок",
|
||||
скорость: [5, 12.5],
|
||||
клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
|
||||
},
|
||||
слежение: {
|
||||
колобок: {
|
||||
//объект: "кирпич",
|
||||
тело: "игрок",
|
||||
изображение: "колобок",
|
||||
смещение: [-35, -35],
|
||||
скорость: 1,
|
||||
},
|
||||
камера: {
|
||||
//объект: "кирпич",
|
||||
тело: "игрок",
|
||||
скорость: 0.1,
|
||||
},
|
||||
/*
|
||||
сенсорИгрока: {
|
||||
тело: "сенсорИгрока",
|
||||
изображение: "изоСенсорИгрока",
|
||||
смещение: [-35, -35],
|
||||
},
|
||||
*/
|
||||
/*
|
||||
подошваИгрока: {
|
||||
тело: "подошваИгрока",
|
||||
изображение: "изоПодошваИгрока",
|
||||
смещение: [-20, -10],
|
||||
},
|
||||
*/
|
||||
},
|
||||
маскиПрыжков: {
|
||||
игрок: {
|
||||
//объект: "кирпич",
|
||||
тело: "игрок",
|
||||
скорость: -1,
|
||||
маски: [1, 1|2],
|
||||
},
|
||||
},
|
||||
звуки: {
|
||||
прыжокИгрока: {
|
||||
события: ["игрок начал прыжок"],
|
||||
файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
|
||||
// // // //
|
||||
// Платформы и объекты печи
|
||||
// // // //
|
||||
|
||||
|
||||
мир.разобрать({
|
||||
объекты: {
|
||||
фундаментПечи: {
|
||||
x: 570,
|
||||
y: 470,
|
||||
ширина: 550,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
полка1: {
|
||||
x: 660,
|
||||
y: 335,
|
||||
ширина: 40,
|
||||
высота: 10,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
полка2: {
|
||||
x: 767,
|
||||
y: 335,
|
||||
ширина: 40,
|
||||
высота: 10,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
полка3: {
|
||||
x: 855,
|
||||
y: 335,
|
||||
ширина: 40,
|
||||
высота: 10,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
полкаСамовара: {
|
||||
x: 975,
|
||||
y: 355,
|
||||
ширина: 70,
|
||||
высота: 10,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
лежанкаПечки: {
|
||||
x: 600,
|
||||
y: 242,
|
||||
ширина: 330,
|
||||
высота: 10,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
основаниеТрубыПечки: {
|
||||
x: 937,
|
||||
y: 175,
|
||||
ширина: 130,
|
||||
высота: 10,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 2,
|
||||
},
|
||||
},
|
||||
},
|
||||
самовар: {
|
||||
x: 650,
|
||||
y: 300,
|
||||
ширина: 70,
|
||||
высота: 120,
|
||||
вид: {
|
||||
background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain",
|
||||
},
|
||||
физика: {
|
||||
isStatic: false,
|
||||
//inertia: Infinity,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
|
||||
// // // //
|
||||
// Подкидывание стрелы
|
||||
// // // //
|
||||
|
||||
|
||||
мир.разобрать({
|
||||
объекты: {
|
||||
сенсор: {
|
||||
x: 1280,
|
||||
y: 400,
|
||||
ширина: 120,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
isStatic: true,
|
||||
isSensor: true,
|
||||
},
|
||||
},
|
||||
стрела: {
|
||||
x: 1230,
|
||||
y: 350,
|
||||
высота: 30,
|
||||
ширина: 200,
|
||||
вид: {
|
||||
display: "inline-block",
|
||||
background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain",
|
||||
transform: "scaleX(-1)",
|
||||
},
|
||||
физика: {
|
||||
isStatic: false,
|
||||
inertia: Infinity,
|
||||
collisionFilter: {
|
||||
category: 4,
|
||||
},
|
||||
},
|
||||
},
|
||||
лук: {
|
||||
x: 1250,
|
||||
y: 200,
|
||||
ширина: 100,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
физика: {
|
||||
isStatic: true,
|
||||
collisionFilter: {
|
||||
category: 4,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
столкновения: {
|
||||
стрелаНачало: {
|
||||
объекты: ["сенсор"],
|
||||
тела: ["игрок"],
|
||||
событие: "сенсор стрелы",
|
||||
},
|
||||
стрелаКонец: {
|
||||
объекты: ["стрела", "лук"],
|
||||
событие: "стрела и лук",
|
||||
},
|
||||
},
|
||||
маскиПрыжков: {
|
||||
стрела: {
|
||||
объект: "стрела",
|
||||
скорость: -1,
|
||||
маски: [0, 2|4]
|
||||
},
|
||||
},
|
||||
звуки: {
|
||||
зарядкаЛука: {
|
||||
события: ["закинули стрелу"],
|
||||
файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
function ПодкидываниеСтрелы() {
|
||||
this.создать = function() {
|
||||
this.времяСтрелы = null;
|
||||
this.времяПриземления = null;
|
||||
this.подкинули = false;
|
||||
this.закинули = false;
|
||||
this.завершить = null;
|
||||
|
||||
мир.события.подписать(this);
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие) {
|
||||
if (событие == "сенсор стрелы")
|
||||
{
|
||||
this.времяСтрелы = мир.физика.движок.timing.timestamp;
|
||||
this.подкинуть();
|
||||
}
|
||||
else if (событие == "игрок приземлился")
|
||||
{
|
||||
this.времяПриземления = мир.физика.движок.timing.timestamp;
|
||||
this.подкинуть();
|
||||
}
|
||||
else if (событие == "игрок начал прыжок")
|
||||
{
|
||||
this.времяСтрелы = null;
|
||||
this.времяПриземления = null;
|
||||
this.подкинули = false;
|
||||
}
|
||||
else if (
|
||||
(событие == "стрела и лук") &&
|
||||
this.закинули &&
|
||||
this.завершить
|
||||
) {
|
||||
мир.события.уведомить("закинули стрелу");
|
||||
мир.события.отписать(this);
|
||||
this.завершить();
|
||||
}
|
||||
};
|
||||
|
||||
this.подкинуть = function() {
|
||||
if (
|
||||
this.подкинули ||
|
||||
!this.времяСтрелы ||
|
||||
!this.времяПриземления ||
|
||||
Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 ||
|
||||
Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.подкинули = true;
|
||||
Matter.Body.setVelocity(
|
||||
мир.объекты.тела.стрела,
|
||||
{ x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
|
||||
);
|
||||
|
||||
if (мир.игрок.приземление.скорость > 16)
|
||||
{
|
||||
this.закинули = true;
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
|
||||
мир.подкидываниеСтрелы = new ПодкидываниеСтрелы();
|
||||
мир.подкидываниеСтрелы.завершить = function() {
|
||||
мир.подкидываниеСтрелы = null;
|
||||
};
|
||||
|
||||
|
||||
// Запустить звук избы
|
||||
мир.события.уведомить("вошли в избу");
|
||||
|
||||
|
||||
// // // //
|
||||
// Пауки и мыши
|
||||
// // // //
|
||||
|
||||
мир.разобрать({
|
||||
объекты: {
|
||||
паук1: {
|
||||
x: 680,
|
||||
y: 300,
|
||||
ширина: 30,
|
||||
вид: {
|
||||
background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain",
|
||||
},
|
||||
физика: {
|
||||
isStatic: false,
|
||||
isSensor: true,
|
||||
},
|
||||
},
|
||||
мышь1: {
|
||||
x: 500,
|
||||
y: 555,
|
||||
высота: 70,
|
||||
ширина: 90,
|
||||
вид: {
|
||||
background: "url(р/животные/мышь.png) no-repeat scroll 0% 0% / contain",
|
||||
},
|
||||
физика: {
|
||||
isStatic: false,
|
||||
isSensor: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
столкновения: {
|
||||
игрокПаук1: {
|
||||
объекты: ["паук1"],
|
||||
тела: ["игрок"],
|
||||
событие: "игрокПаук1",
|
||||
},
|
||||
игрокМышь1: {
|
||||
объекты: ["мышь1"],
|
||||
тела: ["игрок"],
|
||||
событие: "игрокМышь1",
|
||||
},
|
||||
леваяСтенаМышь1: {
|
||||
объекты: ["мышь1", "стенаЛевая"],
|
||||
событие: "леваяСтенаМышь1",
|
||||
},
|
||||
праваяСтенаМышь1: {
|
||||
объекты: ["мышь1", "стенаПравая"],
|
||||
событие: "праваяСтенаМышь1",
|
||||
},
|
||||
},
|
||||
движение: {
|
||||
паук1: {
|
||||
объекты: ["паук1"],
|
||||
скорость: [0.7, 1],
|
||||
x: [610, 1080],
|
||||
y: [350, 450],
|
||||
},
|
||||
мышь1: {
|
||||
объекты: ["мышь1"],
|
||||
скорость: [8, 1.0],
|
||||
x: [0, 2000],
|
||||
y: [590, 590],
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
// // // //
|
||||
// Повреждение игрока
|
||||
// // // //
|
||||
|
||||
|
||||
function ПовреждениеИгрока(события, колобок, имяТела)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
события.подписать(this);
|
||||
this.создатьМигание();
|
||||
this.запомнитьМаску();
|
||||
this.повреждение = null;
|
||||
};
|
||||
|
||||
this.создатьМигание = function()
|
||||
{
|
||||
var вид = document.createElement('style')
|
||||
вид.innerText = `
|
||||
.мигание
|
||||
{
|
||||
animation: мигатель 0.5s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes мигатель
|
||||
{
|
||||
50%
|
||||
{
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(вид)
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "игрокПаук1")
|
||||
{
|
||||
this.повредить(1);
|
||||
}
|
||||
else if (событие == "игрокМышь1")
|
||||
{
|
||||
this.повредить(10);
|
||||
}
|
||||
};
|
||||
|
||||
this.запомнитьМаску = function()
|
||||
{
|
||||
var за = мир.маскиПрыжков.задано;
|
||||
for (var имя in за)
|
||||
{
|
||||
var з = за[имя];
|
||||
if (з.тело == имяТела)
|
||||
{
|
||||
this.имя = имя;
|
||||
this.маски = [з["маски.0"], з["маски.1"]];
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.выставитьМаскиПовреждения = function(значение)
|
||||
{
|
||||
var з = мир.маскиПрыжков.задано[this.имя];
|
||||
з["маски.0"] = значение;
|
||||
з["маски.1"] = значение;
|
||||
};
|
||||
|
||||
this.вернутьПервоначальныеМаски = function()
|
||||
{
|
||||
var з = мир.маскиПрыжков.задано[this.имя];
|
||||
з["маски.0"] = this.маски[0];
|
||||
з["маски.1"] = this.маски[1];
|
||||
};
|
||||
|
||||
this.повредить = function(значение)
|
||||
{
|
||||
if (!this.повреждение)
|
||||
{
|
||||
колобок.classList.add("мигание");
|
||||
}
|
||||
this.выставитьМаскиПовреждения(значение);
|
||||
this.повреждение = new Date();
|
||||
var тут = this;
|
||||
setTimeout(
|
||||
function() { тут.возможноПрекратить() },
|
||||
5000
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
this.возможноПрекратить = function()
|
||||
{
|
||||
if (!this.повреждение)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var сейчас = new Date();
|
||||
var прошло = сейчас - this.повреждение;
|
||||
if (прошло > 4990)
|
||||
{
|
||||
колобок.classList.remove("мигание")
|
||||
this.вернутьПервоначальныеМаски();
|
||||
this.повреждение = null;
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
|
||||
мир.повреждениеИгрока = new ПовреждениеИгрока(
|
||||
мир.события,
|
||||
мир.изображения.элементы.колобок,
|
||||
"игрок"
|
||||
);
|
||||
|
||||
|
||||
|
||||
function ПереворачиватьМышь(события, имяМыши)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "леваяСтенаМышь1")
|
||||
{
|
||||
/**/console.debug("соб. леваяСМ1");
|
||||
мир.разобрать({
|
||||
объекты: {
|
||||
мышь1: {
|
||||
вид: {
|
||||
transform: "scaleX(-1)",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
else if (событие == "праваяСтенаМышь1")
|
||||
{
|
||||
/**/console.debug("соб. праваяСМ1");
|
||||
мир.разобрать({
|
||||
объекты: {
|
||||
мышь1: {
|
||||
вид: {
|
||||
transform: "scaleX(1)",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
|
||||
мир.переворачиватьМышь = new ПереворачиватьМышь(
|
||||
мир.события,
|
||||
"мышь1"
|
||||
);
|
||||
|
||||
|
||||
// // // //
|
||||
// Подпол и стены
|
||||
// // // //
|
||||
|
||||
|
||||
мир.разобрать({
|
||||
объекты: {
|
||||
полПодпола: {
|
||||
x: 0,
|
||||
y: 980,
|
||||
ширина: 2000,
|
||||
высота: 50,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
//display: "none",
|
||||
},
|
||||
физика: {
|
||||
collisionFilter: {
|
||||
category: 10,
|
||||
},
|
||||
},
|
||||
},
|
||||
стенаЛевая: {
|
||||
x: -40,
|
||||
y: 0,
|
||||
высота: 1000,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
},
|
||||
стенаПравая: {
|
||||
x: 2000,
|
||||
y: 0,
|
||||
высота: 1000,
|
||||
вид: {
|
||||
background: "url(р/отладка/основа.jpg)",
|
||||
display: "none",
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
73
index.html
@@ -9,22 +9,79 @@
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
background: #fbfbfb;
|
||||
}
|
||||
|
||||
body {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
#заставка {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
background: #ffffff;
|
||||
z-index: 100;
|
||||
}
|
||||
#заставка > img {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin-left: -320px;
|
||||
margin-top: -240px;
|
||||
}
|
||||
|
||||
#корень {
|
||||
position: relative;
|
||||
}
|
||||
#отладка {
|
||||
position: absolute;
|
||||
right: 2em;
|
||||
bottom: 2em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<script src="00100.мир.js"></script>
|
||||
<script src="00110.заголовок.js"></script>
|
||||
<script src="00120.физика.js"></script>
|
||||
<script src="00130.объекты.js"></script>
|
||||
<script src="00140.клавиши.js"></script>
|
||||
<script src="01000.пуск.js"></script>
|
||||
<script src="01300.пример.json.js"></script>
|
||||
<script src="02000.обновление.js"></script>
|
||||
|
||||
<script>
|
||||
function загрузитьСкрипт(адрес)
|
||||
{
|
||||
var скрипт = document.createElement('script');
|
||||
скрипт.src = адрес;
|
||||
document.head.appendChild(скрипт);
|
||||
}
|
||||
function запустить()
|
||||
{
|
||||
document.getElementById("заставка").style.display = "none";
|
||||
мир.пуск.запустить();
|
||||
загрузитьСкрипт("800.пример.json.js");
|
||||
загрузитьСкрипт("900.обновление.js");
|
||||
}
|
||||
</script>
|
||||
<div id="заставка" onclick="запустить()">
|
||||
<img src="р/сцены/заставка.jpg">
|
||||
</div>
|
||||
|
||||
<div id="корень"></div>
|
||||
<div id="отладка"></div>
|
||||
<script src="100.мир.js"></script>
|
||||
<script src="105.заголовок.js"></script>
|
||||
<script src="120.физика.js"></script>
|
||||
<script src="130.изображения.js"></script>
|
||||
<script src="150.тела.js"></script>
|
||||
<script src="170.объекты.js"></script>
|
||||
<script src="180.ввод.js"></script>
|
||||
<script src="200.движение.js"></script>
|
||||
<script src="300.события.js"></script>
|
||||
<script src="320.игрок.js"></script>
|
||||
<script src="350.слежение.js"></script>
|
||||
<script src="360.маскиПрыжков.js"></script>
|
||||
<script src="380.звуки.js"></script>
|
||||
<script src="400.столкновения.js"></script>
|
||||
<script src="666.ограничитель.js"></script>
|
||||
<script src="667.ручноетело.js"></script>
|
||||
<script src="700.пуск.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
BIN
р/вещи/самовар.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
р/вещи/самовар.xcf
Normal file
BIN
р/вещи/стрела.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
р/вещи/стрела.xcf
Normal file
BIN
р/животные/мышь.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
р/животные/мышь.xcf
Normal file
BIN
р/животные/паук.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
р/животные/паук.xcf
Normal file
BIN
р/звуки/331381__qubodup__public-domain-jump-sound.wav
Normal file
BIN
р/звуки/387922__setuniman__scheming-1o95.mp3
Normal file
BIN
р/звуки/543927__eminyildirim__pistol-gun-cocking.wav
Normal file
3
р/звуки/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
* https://freesound.org/people/qubodup/sounds/331381/
|
||||
* https://freesound.org/people/Setuniman/sounds/387922/
|
||||
* https://freesound.org/people/EminYILDIRIM/sounds/543927/
|
||||
BIN
р/сцены/заставка.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
р/сцены/изба.jpg
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
р/сцены/изба.xcf
Normal file
BIN
р/сцены/подпол.jpg
Normal file
|
After Width: | Height: | Size: 26 KiB |