M-4.0
This commit is contained in:
38
M/4.0/игра.html
Normal file
38
M/4.0/игра.html
Normal file
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<script src="общее/base64-js/base64js.min.js"></script>
|
||||
<script src="общее/pako/pako.min.js"></script>
|
||||
<script src="игра/matter-js/matter.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
overflow: hidden;
|
||||
}
|
||||
#корень
|
||||
{
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="заставка"></div>
|
||||
<div id="корень"></div>
|
||||
<div id="отладка"></div>
|
||||
|
||||
<script src="общее/100.События.js"></script>
|
||||
<script src="общее/150.Состояние.js"></script>
|
||||
<script src="общее/200.функции.js"></script>
|
||||
<script src="игра/050.Заголовок.js"></script>
|
||||
<script src="игра/070.Виды.js"></script>
|
||||
<script src="игра/100.Изображения.js"></script>
|
||||
<script src="игра/120.Физика.js"></script>
|
||||
<script src="игра/140.Тела.js"></script>
|
||||
<script src="игра/160.Слежение.js"></script>
|
||||
<script src="игра/180.Объекты.js"></script>
|
||||
<script src="игра/700.Игра.js"></script>
|
||||
<script>
|
||||
var игра = new Игра();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
10
M/4.0/игра/050.Заголовок.js
Normal file
10
M/4.0/игра/050.Заголовок.js
Normal file
@@ -0,0 +1,10 @@
|
||||
function Заголовок()
|
||||
{
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (ключ == "заголовок")
|
||||
{
|
||||
document.title = значение;
|
||||
}
|
||||
}
|
||||
}
|
||||
28
M/4.0/игра/070.Виды.js
Normal file
28
M/4.0/игра/070.Виды.js
Normal file
@@ -0,0 +1,28 @@
|
||||
function Виды(события)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.задано = {};
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "виды")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
let имя = путь[1];
|
||||
let свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
события.уведомить(`виды/${имя}`);
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
};
|
||||
146
M/4.0/игра/100.Изображения.js
Normal file
146
M/4.0/игра/100.Изображения.js
Normal file
@@ -0,0 +1,146 @@
|
||||
function Изображения(события, виды, корень)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
пр: [0, 0, 100, 100],
|
||||
угол: 0,
|
||||
};
|
||||
this.задано = {};
|
||||
this.элементы = {};
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.создатьИлиПолучитьЭлемент = function(имя)
|
||||
{
|
||||
var эл = this.элементы[имя];
|
||||
if (эл)
|
||||
{
|
||||
return эл;
|
||||
}
|
||||
|
||||
var ум = this.умолчание;
|
||||
эл = document.createElement("div");
|
||||
эл.id = `изображения-${имя}`;
|
||||
эл.style.position = "absolute";
|
||||
эл.style.display = "block";
|
||||
// Свойства по умолчанию.
|
||||
this.обновитьПозициюРазмерЭлемента(имя, эл);
|
||||
эл.style.transform = `rotate(${ум.угол}rad)`;
|
||||
this.элементы[имя] = эл;
|
||||
корень.appendChild(эл);
|
||||
return эл;
|
||||
};
|
||||
|
||||
this.обновитьВид = function(имя, вид)
|
||||
{
|
||||
var эл = this.создатьИлиПолучитьЭлемент(имя);
|
||||
let за = виды.задано[вид];
|
||||
for (let параметр in за)
|
||||
{
|
||||
эл.style.setProperty(параметр, за[параметр]);
|
||||
}
|
||||
this.обновитьУгол(имя);
|
||||
};
|
||||
|
||||
this.обновитьПозициюРазмерЭлемента = function(имя, эл)
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
эл.style.left = `${пр[0]}px`;
|
||||
эл.style.top = `${пр[1]}px`;
|
||||
эл.style.width = `${пр[2]}px`;
|
||||
эл.style.height = `${пр[3]}px`;
|
||||
};
|
||||
|
||||
this.обновитьУгол = function(имя)
|
||||
{
|
||||
var за = this.задано[имя];
|
||||
var ум = this.умолчание;
|
||||
var эл = this.элементы[имя];
|
||||
|
||||
var угол = за.угол ? за.угол : ум.угол;
|
||||
var transform = `rotate(${угол}deg) `;
|
||||
|
||||
let вид = за["вид"];
|
||||
if (вид)
|
||||
{
|
||||
let виза = виды.задано[вид];
|
||||
if (виза && виза["transform"])
|
||||
{
|
||||
transform += виза["transform"];
|
||||
}
|
||||
}
|
||||
|
||||
эл.style.transform = transform;
|
||||
};
|
||||
|
||||
this.обновитьЭлемент = function(имя, свойство, значение)
|
||||
{
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
var за = this.задано[имя];
|
||||
var эл = this.создатьИлиПолучитьЭлемент(имя);
|
||||
|
||||
if (свойство.startsWith("пр"))
|
||||
{
|
||||
this.обновитьПозициюРазмерЭлемента(имя, эл);
|
||||
}
|
||||
else if (
|
||||
(свойство == "угол") ||
|
||||
(свойство == "вид")
|
||||
) {
|
||||
this.обновитьВид(имя, за["вид"]);
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьЭлементыВида = function(вид)
|
||||
{
|
||||
for (let имя in this.задано)
|
||||
{
|
||||
let заданныйВид = this.задано[имя]["вид"];
|
||||
if (заданныйВид && заданныйВид == вид)
|
||||
{
|
||||
this.обновитьВид(имя, вид);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] == "изображения")
|
||||
{
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
this.обновитьЭлемент(имя, свойство, значение);
|
||||
}
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
let префикс = "виды/";
|
||||
if (событие.startsWith(префикс))
|
||||
{
|
||||
let вид = событие.substring(префикс.length);
|
||||
this.обновитьЭлементыВида(вид);
|
||||
}
|
||||
};
|
||||
|
||||
this.пр = function(имя)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
let пр = this.умолчание.пр;
|
||||
return [
|
||||
за["пр.0"] ? за["пр.0"] : пр[0],
|
||||
за["пр.1"] ? за["пр.1"] : пр[1],
|
||||
за["пр.2"] ? за["пр.2"] : пр[2],
|
||||
за["пр.3"] ? за["пр.3"] : пр[3],
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
28
M/4.0/игра/120.Физика.js
Normal file
28
M/4.0/игра/120.Физика.js
Normal file
@@ -0,0 +1,28 @@
|
||||
function Физика(события)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.задано = {};
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "физика")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
let имя = путь[1];
|
||||
let свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
события.уведомить(`физика/${имя}`);
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
};
|
||||
149
M/4.0/игра/140.Тела.js
Normal file
149
M/4.0/игра/140.Тела.js
Normal file
@@ -0,0 +1,149 @@
|
||||
function Тела(события, физика, физмир)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
пр: [0, 0, 40, 20],
|
||||
части: [],
|
||||
часть: false,
|
||||
};
|
||||
|
||||
this.задано = {};
|
||||
this.тела = {};
|
||||
this.имена = {};
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.именаЧастей = function(за)
|
||||
{
|
||||
var имена = [];
|
||||
for (var ключ in за)
|
||||
{
|
||||
if (ключ.startsWith("части"))
|
||||
{
|
||||
имена.push(за[ключ]);
|
||||
}
|
||||
}
|
||||
return имена;
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "тела")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
this.пересоздатьТело(имя);
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
let префикс = "физика/";
|
||||
if (событие.startsWith(префикс))
|
||||
{
|
||||
let физ = событие.substring(префикс.length);
|
||||
this.пересоздатьТелаФизики(физ);
|
||||
}
|
||||
};
|
||||
|
||||
this.пересоздатьТелаФизики = function(физ)
|
||||
{
|
||||
for (let имя in this.задано)
|
||||
{
|
||||
let заданнаяФизика = this.задано[имя]["физика"];
|
||||
if (заданнаяФизика && заданнаяФизика == физ)
|
||||
{
|
||||
this.пересоздатьТело(имя);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.пересоздатьТело = function(имя)
|
||||
{
|
||||
// Удаляем старое тело.
|
||||
if (имя in this.тела)
|
||||
{
|
||||
var тело = this.тела[имя];
|
||||
delete this.имена[тело.id];
|
||||
// Всегда удаляем из мира: и составные, и несоставные тела.
|
||||
Matter.Composite.remove(физмир, тело);
|
||||
}
|
||||
|
||||
var за = this.задано[имя];
|
||||
var ум = this.умолчание;
|
||||
let пр = this.пр(имя);
|
||||
// Переводим x,y из левого верхнего угла в центр.
|
||||
пр[0] = пр[0] + пр[2] / 2.0;
|
||||
пр[1] = пр[1] + пр[3] / 2.0;
|
||||
// Параметры тела.
|
||||
var параметры = {};
|
||||
if (за.физика)
|
||||
{
|
||||
let заф = физика.задано[за.физика];
|
||||
for (let параметр in заф)
|
||||
{
|
||||
мир.задатьПолныйКлюч(параметры, параметр, заф[параметр]);
|
||||
}
|
||||
}
|
||||
|
||||
var тело = null;
|
||||
// Создаём новое составное тело.
|
||||
if (за["части.0"])
|
||||
{
|
||||
параметры["parts"] = this.телаЧастей(this.именаЧастей(за));
|
||||
тело = Matter.Body.create(параметры);
|
||||
}
|
||||
// Создаём новое несоставное тело.
|
||||
// Вполне может быть частью другого составного тела.
|
||||
else
|
||||
{
|
||||
тело = Matter.Bodies.rectangle(пр[0], пр[1], пр[2], пр[3], параметры);
|
||||
}
|
||||
this.тела[имя] = тело;
|
||||
this.имена[тело.id] = имя;
|
||||
|
||||
// Добавляем тело в физический мир, если оно не является частью другого составного тела.
|
||||
var часть = за.часть ? за.часть : ум.часть;
|
||||
if (!часть)
|
||||
{
|
||||
Matter.Composite.add(физмир, тело);
|
||||
}
|
||||
};
|
||||
|
||||
this.пр = function(имя)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
let пр = this.умолчание.пр;
|
||||
return [
|
||||
за["пр.0"] ? за["пр.0"] : пр[0],
|
||||
за["пр.1"] ? за["пр.1"] : пр[1],
|
||||
за["пр.2"] ? за["пр.2"] : пр[2],
|
||||
за["пр.3"] ? за["пр.3"] : пр[3],
|
||||
];
|
||||
};
|
||||
|
||||
this.телаЧастей = function(имена)
|
||||
{
|
||||
var тела = [];
|
||||
for (var н in имена)
|
||||
{
|
||||
var имя = имена[н];
|
||||
var тело = this.тела[имя];
|
||||
тела.push(тело);
|
||||
}
|
||||
return тела;
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
|
||||
105
M/4.0/игра/160.Слежение.js
Normal file
105
M/4.0/игра/160.Слежение.js
Normal file
@@ -0,0 +1,105 @@
|
||||
function Слежение(состояние, изображения, тела)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
смещение: [0, 0],
|
||||
скорость: 1,
|
||||
предел: 0,
|
||||
};
|
||||
this.задано = {};
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
for (var имя in this.задано)
|
||||
{
|
||||
this.расположитьИзображение(имя);
|
||||
}
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "слежение")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var имя = путь[1];
|
||||
var свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
};
|
||||
|
||||
this.расположитьИзображение = function(имя)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
let тело = тела.тела[за.тело];
|
||||
let элемент = изображения.элементы[за.изображение];
|
||||
if (!тело || !элемент)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
let ум = this.умолчание;
|
||||
|
||||
// Параметры.
|
||||
var скорость = за.скорость ? за.скорость : ум.скорость;
|
||||
var смещениеX = за["смещение.0"] ? за["смещение.0"] : ум.смещение[0];
|
||||
var смещениеY = за["смещение.1"] ? за["смещение.1"] : ум.смещение[1];
|
||||
var предел = за.предел ? за.предел : ум.предел;
|
||||
|
||||
// Текущая позиция.
|
||||
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;
|
||||
// Radians -> Degrees.
|
||||
var угол = тело.angle * 180 / Math.PI;
|
||||
|
||||
// Устанавливаемая плавно позиция.
|
||||
var x = this.lerp(x0, x1, скорость, предел);
|
||||
var y = this.lerp(y0, y1, скорость, предел);
|
||||
|
||||
элемент.dataset.слежениеX = x;
|
||||
элемент.dataset.слежениеY = y;
|
||||
|
||||
var описание = {
|
||||
пр: [x, y],
|
||||
угол: угол,
|
||||
};
|
||||
состояние.разобрать({
|
||||
изображения: {
|
||||
[за.изображение]: описание,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
this.lerp = function(v0, v1, t, предел) {
|
||||
// Убираем мельтешение в случае наличия предела.
|
||||
if (предел)
|
||||
{
|
||||
var delta = Math.abs(v0 - v1);
|
||||
if (delta < предел) {
|
||||
return v0;
|
||||
}
|
||||
}
|
||||
return v0 * (1 - t) + v1 * t;
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
};
|
||||
109
M/4.0/игра/180.Объекты.js
Normal file
109
M/4.0/игра/180.Объекты.js
Normal file
@@ -0,0 +1,109 @@
|
||||
function Объекты(состояние)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.умолчание = {
|
||||
пр: [0, 0, 40, 20],
|
||||
};
|
||||
this.задано = {};
|
||||
};
|
||||
|
||||
this.обновитьИзображение = function(имя, пр, вид)
|
||||
{
|
||||
состояние.разобрать({
|
||||
изображения: {
|
||||
[имя]: {
|
||||
пр: пр,
|
||||
вид: вид,
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
this.обновитьПозициюРазмер = function(имя, пр)
|
||||
{
|
||||
состояние.разобрать({
|
||||
тела: {
|
||||
[имя]: {
|
||||
пр: пр,
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
this.обновитьСлежение = function(имя, пр)
|
||||
{
|
||||
состояние.разобрать({
|
||||
слежение: {
|
||||
[имя]: {
|
||||
изображение: имя,
|
||||
тело: имя,
|
||||
смещение: [-пр[2] / 2, -пр[3] / 2],
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
this.обновитьФизику = function(имя, значение)
|
||||
{
|
||||
состояние.разобрать({
|
||||
тела: {
|
||||
[имя]: {
|
||||
физика: значение,
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
if (путь[0] != "объекты")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
let имя = путь[1];
|
||||
let свойство = путь.slice(2).join(".");
|
||||
if (!this.задано[имя])
|
||||
{
|
||||
this.задано[имя] = {};
|
||||
}
|
||||
this.задано[имя][свойство] = значение;
|
||||
|
||||
let производноеИмя = `объекты-${имя}`;
|
||||
|
||||
if (свойство.startsWith("пр."))
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
this.обновитьПозициюРазмер(производноеИмя, пр);
|
||||
this.обновитьСлежение(производноеИмя, пр);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
this.обновитьИзображение(производноеИмя, пр, вид);
|
||||
}
|
||||
else if (свойство == "физика")
|
||||
{
|
||||
this.обновитьФизику(производноеИмя, значение);
|
||||
}
|
||||
else if (свойство == "вид")
|
||||
{
|
||||
let пр = this.пр(имя);
|
||||
let вид = this.задано[имя]["вид"];
|
||||
this.обновитьИзображение(производноеИмя, пр, вид);
|
||||
}
|
||||
};
|
||||
|
||||
this.пр = function(имя)
|
||||
{
|
||||
let за = this.задано[имя];
|
||||
let пр = this.умолчание.пр;
|
||||
return [
|
||||
за["пр.0"] ? за["пр.0"] : пр[0],
|
||||
за["пр.1"] ? за["пр.1"] : пр[1],
|
||||
за["пр.2"] ? за["пр.2"] : пр[2],
|
||||
за["пр.3"] ? за["пр.3"] : пр[3],
|
||||
];
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
};
|
||||
76
M/4.0/игра/700.Игра.js
Normal file
76
M/4.0/игра/700.Игра.js
Normal file
@@ -0,0 +1,76 @@
|
||||
function Игра()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
мир.физдвижок = Matter.Engine.create({
|
||||
enableSleeping: true,
|
||||
gravity: {
|
||||
y: 2,
|
||||
},
|
||||
});
|
||||
var корень = document.getElementById("корень");
|
||||
мир.события = new События();
|
||||
мир.состояние = new Состояние();
|
||||
мир.состояние.обработчик = (к, п, з) => { this.обработатьКлюч(к, п, з) };
|
||||
мир.виды = new Виды(мир.события);
|
||||
мир.изображения = new Изображения(мир.события, мир.виды, корень),
|
||||
мир.физика = new Физика(мир.события);
|
||||
мир.тела = new Тела(мир.события, мир.физика, мир.физдвижок.world);
|
||||
мир.слежение = new Слежение(мир.состояние, мир.изображения, мир.тела);
|
||||
мир.объекты = new Объекты(мир.состояние);
|
||||
this.ключники = [
|
||||
new Заголовок(),
|
||||
мир.виды,
|
||||
мир.изображения,
|
||||
мир.физика,
|
||||
мир.тела,
|
||||
мир.слежение,
|
||||
мир.объекты,
|
||||
];
|
||||
|
||||
var z64 = мир.параметрыЗапуска()["z64"];
|
||||
this.исполнитьКод(z64);
|
||||
this.отслеживатьОбновленияКода();
|
||||
this.обновить();
|
||||
};
|
||||
|
||||
this.исполнитьКод = function(z64)
|
||||
{
|
||||
if (z64)
|
||||
{
|
||||
var код = мир.изZ64(z64);
|
||||
eval(код);
|
||||
}
|
||||
};
|
||||
|
||||
this.обновить = function()
|
||||
{
|
||||
Matter.Engine.update(мир.физдвижок);
|
||||
мир.слежение.обновить();
|
||||
|
||||
var тут = this;
|
||||
requestAnimationFrame(function() {
|
||||
тут.обновить();
|
||||
});
|
||||
};
|
||||
|
||||
this.обработатьКлюч = function(ключ, путь, значение)
|
||||
{
|
||||
for (var номер in this.ключники)
|
||||
{
|
||||
var ключник = this.ключники[номер];
|
||||
ключник.обработатьКлюч(ключ, путь, значение);
|
||||
}
|
||||
};
|
||||
|
||||
this.отслеживатьОбновленияКода = function()
|
||||
{
|
||||
var тут = this;
|
||||
window.addEventListener("message", function(событие) {
|
||||
тут.исполнитьКод(событие.data);
|
||||
});
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
1
M/4.0/игра/matter-js
Symbolic link
1
M/4.0/игра/matter-js
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/matter-js
|
||||
31
M/4.0/общее/100.События.js
Normal file
31
M/4.0/общее/100.События.js
Normal file
@@ -0,0 +1,31 @@
|
||||
function События()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.обработчики = [];
|
||||
};
|
||||
|
||||
this.подписать = function(обработчик)
|
||||
{
|
||||
this.обработчики.push(обработчик);
|
||||
};
|
||||
|
||||
this.отписать = function(обработчик) {
|
||||
var номер = this.обработчики.indexOf(обработчик);
|
||||
if (номер != -1)
|
||||
{
|
||||
this.обработчики.splice(номер, 1);
|
||||
}
|
||||
};
|
||||
|
||||
this.уведомить = function(событие) {
|
||||
for (var номер in this.обработчики)
|
||||
{
|
||||
var обработчик = this.обработчики[номер];
|
||||
обработчик.обработатьСобытие(событие);
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
61
M/4.0/общее/150.Состояние.js
Normal file
61
M/4.0/общее/150.Состояние.js
Normal file
@@ -0,0 +1,61 @@
|
||||
function Состояние()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.обработчик = null;
|
||||
this.значения = {};
|
||||
};
|
||||
|
||||
this.выпрямить = function(obj)
|
||||
{
|
||||
// https://stackoverflow.com/a/42121920
|
||||
var newObj = {};
|
||||
for (var key in obj)
|
||||
{
|
||||
if (typeof obj[key] === 'object' && obj[key] !== null)
|
||||
{
|
||||
var temp = this.выпрямить(obj[key])
|
||||
for (var key2 in temp)
|
||||
{
|
||||
newObj[key + "." + key2] = temp[key2];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
return newObj;
|
||||
};
|
||||
|
||||
this.лишьНовыеЗначения = function(значения) {
|
||||
var новые = {};
|
||||
for (var ключ in значения)
|
||||
{
|
||||
var было = this.значения[ключ];
|
||||
var стало = значения[ключ];
|
||||
if (!(было != null && было == стало))
|
||||
{
|
||||
новые[ключ] = стало;
|
||||
this.значения[ключ] = стало;
|
||||
}
|
||||
}
|
||||
return новые;
|
||||
};
|
||||
|
||||
this.разобрать = function(словарь) {
|
||||
var значения = this.лишьНовыеЗначения(this.выпрямить(словарь));
|
||||
for (var ключ in значения)
|
||||
{
|
||||
var путь = ключ.split(".");
|
||||
var значение = значения[ключ];
|
||||
if (this.обработчик)
|
||||
{
|
||||
this.обработчик(ключ, путь, значение);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
91
M/4.0/общее/200.функции.js
Normal file
91
M/4.0/общее/200.функции.js
Normal file
@@ -0,0 +1,91 @@
|
||||
var мир = {};
|
||||
|
||||
мир.uuid = function()
|
||||
{
|
||||
// https://stackoverflow.com/a/2117523
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
|
||||
/[xy]/g,
|
||||
function(c)
|
||||
{
|
||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
мир.вZ64 = function(строка)
|
||||
{
|
||||
var байты = new TextEncoder("utf-8").encode(строка);
|
||||
var архив = pako.deflate(байты, { to: 'string' });
|
||||
return base64js.fromByteArray(архив);
|
||||
};
|
||||
|
||||
мир.изZ64 = function(строка)
|
||||
{
|
||||
var архив = base64js.toByteArray(строка);
|
||||
var байты = pako.inflate(архив);
|
||||
return new TextDecoder("utf-8").decode(байты);
|
||||
};
|
||||
|
||||
мир.задатьПолныйКлюч = function(словарь, полныйКлюч, значение) {
|
||||
var путь = полныйКлюч.split(".");
|
||||
var пройти = путь.length - 1;
|
||||
var вложенность = словарь;
|
||||
for (var номер = 0; номер < пройти; ++номер)
|
||||
{
|
||||
var ключ = путь[номер];
|
||||
if (!(ключ in вложенность))
|
||||
{
|
||||
вложенность[ключ] = {};
|
||||
вложенность = вложенность[ключ];
|
||||
}
|
||||
}
|
||||
// Значение в конце вложенности.
|
||||
var ключ = путь[пройти];
|
||||
вложенность[ключ] = значение;
|
||||
};
|
||||
|
||||
мир.назначитьКнопкамСобытия = function(события, список)
|
||||
{
|
||||
for (var номер in список)
|
||||
{
|
||||
const пара = список[номер];
|
||||
var кнопка = document.getElementById(пара[0]);
|
||||
кнопка.addEventListener("click", function(_) {
|
||||
события.уведомить(пара[1]);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
мир.параметрыЗапуска = function()
|
||||
{
|
||||
var параметры = {};
|
||||
var запрос = window.location.search.substring(1);
|
||||
var аргументы = запрос.split("&");
|
||||
for (var номер in аргументы)
|
||||
{
|
||||
var арг = аргументы[номер];
|
||||
var позицияЗнака = арг.indexOf("=");
|
||||
// Лишь ключ.
|
||||
if (позицияЗнака == -1)
|
||||
{
|
||||
var ключ = decodeURIComponent(арг);
|
||||
параметры[ключ] = null;
|
||||
}
|
||||
// Ключ со значением.
|
||||
else
|
||||
{
|
||||
var сыройКлюч = арг.slice(0, позицияЗнака);
|
||||
var сыроеЗначение = арг.slice(позицияЗнака + 1);
|
||||
var ключ = decodeURIComponent(сыройКлюч);
|
||||
var значение = decodeURIComponent(сыроеЗначение);
|
||||
параметры[ключ] = значение;
|
||||
}
|
||||
}
|
||||
return параметры;
|
||||
};
|
||||
|
||||
мир.разобрать = function(словарь)
|
||||
{
|
||||
мир.состояние.разобрать(словарь);
|
||||
};
|
||||
1
M/4.0/общее/base64-js
Symbolic link
1
M/4.0/общее/base64-js
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/base64-js
|
||||
1
M/4.0/общее/pako
Symbolic link
1
M/4.0/общее/pako
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/pako
|
||||
110
M/4.0/редактор.html
Normal file
110
M/4.0/редактор.html
Normal file
@@ -0,0 +1,110 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<title>M-4.0</title>
|
||||
|
||||
<script src="общее/base64-js/base64js.min.js"></script>
|
||||
<script src="общее/pako/pako.min.js"></script>
|
||||
<script src="редактор/ace/ace.js"></script>
|
||||
<script src="редактор/ace/mode-javascript.js"></script>
|
||||
<script src="редактор/ace/worker-javascript.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="редактор/uikit/uikit.min.css" />
|
||||
<script src="редактор/uikit/uikit.min.js"></script>
|
||||
<script src="редактор/uikit/uikit-icons.min.js"></script>
|
||||
|
||||
<style>
|
||||
#редактор
|
||||
{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: calc(50% - 2em);
|
||||
}
|
||||
#пульт
|
||||
{
|
||||
position: absolute;
|
||||
left: calc(50% - 2em);
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 4em;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: 1px dashed gainsboro;
|
||||
}
|
||||
#проигрыватель
|
||||
{
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: calc(50% - 2em);
|
||||
height: 100%;
|
||||
border: 0px none;
|
||||
}
|
||||
|
||||
.впульте
|
||||
{
|
||||
margin: 0 auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="редактор"></div>
|
||||
<div id="пульт">
|
||||
<span id="ошибка" class="впульте"> </span>
|
||||
<a id="перезапустить" class="впульте uk-icon-button uk-margin-top" uk-icon="refresh" uk-tooltip="Перезапустить"></a>
|
||||
<a id="отдельно" class="впульте uk-icon-button uk-margin-top" uk-icon="desktop" uk-tooltip="Запустить в отдельной вкладке"></a>
|
||||
<a id="ссылка" class="впульте uk-icon-button uk-margin-top" uk-icon="link" uk-tooltip="Скопировать ссылку"></a>
|
||||
<a id="документация" class="впульте uk-icon-button uk-margin-top" uk-icon="question" uk-tooltip="Документация"></a>
|
||||
<a id="версия" class="впульте uk-icon-button uk-margin-top" uk-icon="git-branch" uk-tooltip="Версия"></a>
|
||||
<div uk-dropdown="mode: click">
|
||||
<table class="uk-table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>4.0</td>
|
||||
<td>???</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../3.5/редактор.html">3.5</a></td>
|
||||
<td>объекты</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../3.4/редактор.html">3.4</a></td>
|
||||
<td>Документация</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../3.3/редактор/index.html">3.3</a></td>
|
||||
<td>тела, слежение</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../3.2/редактор/index.html">3.2</a></td>
|
||||
<td>мир.параметрыЗапуска, мир.разобрать, заголовок, изображения, состояние, физика</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../3.1/редактор/index.html">3.1</a></td>
|
||||
<td>Кнопки перезапуска, копирования ссылки, запуска в отдельной вкладке</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="../3.0/редактор/index.html">3.0</a></td>
|
||||
<td>Проверка введённого кода на отсутствие синтаксических ошибок</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<iframe id="проигрыватель" name="проигрыватель"></iframe>
|
||||
|
||||
<script src="общее/100.События.js"></script>
|
||||
<script src="общее/150.Состояние.js"></script>
|
||||
<script src="общее/200.функции.js"></script>
|
||||
<script src="редактор/100.Редактор.js"></script>
|
||||
<script src="редактор/200.Пульт.js"></script>
|
||||
<script src="редактор/700.Муром.js"></script>
|
||||
<script>
|
||||
var муром = new Муром();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
127
M/4.0/редактор/100.Редактор.js
Normal file
127
M/4.0/редактор/100.Редактор.js
Normal file
@@ -0,0 +1,127 @@
|
||||
function Редактор(события, имяРедактора)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.первоначальныйЗаголовок = document.title;
|
||||
this.установитьAce();
|
||||
this.улавливатьЗавершениеРедактирования();
|
||||
this.задатьКодПриЗапуске();
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.задатьКодПриЗапуске = function()
|
||||
{
|
||||
var z64 = мир.параметрыЗапуска()["z64"];
|
||||
if (z64)
|
||||
{
|
||||
var код = мир.изZ64(z64);
|
||||
this.ace.session.setValue(код);
|
||||
}
|
||||
};
|
||||
|
||||
this.запуститьОтдельно = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
var путь = window.location.pathname + "/../игра.html?z64=" + z64;
|
||||
window.open(путь);
|
||||
};
|
||||
|
||||
this.исполнитьКод = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
// Исполняем явно код лишь первый раз.
|
||||
var проигрыватель = document.getElementById("проигрыватель");
|
||||
if (!проигрыватель.src)
|
||||
{
|
||||
проигрыватель.src = "игра.html?z64=" + z64;
|
||||
}
|
||||
// После запуска уведомляем iframe о новом коде без перезагрузки.
|
||||
else
|
||||
{
|
||||
window.frames.проигрыватель.postMessage(z64, "*");
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьАдреснуюСтрокуИЗаголовок = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
var путь = window.location.pathname + "?z64=" + z64;
|
||||
history.pushState(null, "", путь);
|
||||
document.title = `${this.первоначальныйЗаголовок} ${z64.length}:${z64.slice(z64.length - 5)}`;
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "завершили редактирование")
|
||||
{
|
||||
this.обновитьАдреснуюСтрокуИЗаголовок();
|
||||
this.проверитьКорректностьКода();
|
||||
}
|
||||
else if (событие == "код корректен")
|
||||
{
|
||||
this.исполнитьКод();
|
||||
}
|
||||
else if (событие == "перезапустить")
|
||||
{
|
||||
this.перезапуститьКод();
|
||||
}
|
||||
else if (событие == "запустить отдельно")
|
||||
{
|
||||
this.запуститьОтдельно();
|
||||
}
|
||||
};
|
||||
|
||||
this.перезапуститьКод = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
var проигрыватель = document.getElementById("проигрыватель");
|
||||
проигрыватель.src = "игра.html?z64=" + z64;
|
||||
};
|
||||
|
||||
this.проверитьКорректностьКода = function()
|
||||
{
|
||||
try
|
||||
{
|
||||
eval(this.ace.session.getValue());
|
||||
события.уведомить("код корректен");
|
||||
}
|
||||
catch (ошибка)
|
||||
{
|
||||
события.уведомить("код некорректен");
|
||||
}
|
||||
};
|
||||
|
||||
this.улавливатьЗавершениеРедактирования = function()
|
||||
{
|
||||
var тут = this;
|
||||
this.ace.session.on("change", function(дельта) {
|
||||
const билет = мир.uuid();
|
||||
тут.билет = билет;
|
||||
setTimeout(
|
||||
function()
|
||||
{
|
||||
if (билет == тут.билет)
|
||||
{
|
||||
события.уведомить("завершили редактирование");
|
||||
}
|
||||
},
|
||||
300
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
this.установитьAce = function()
|
||||
{
|
||||
var область = document.getElementById(имяРедактора);
|
||||
this.ace = window.ace.edit(имяРедактора);
|
||||
this.ace.session.setMode("ace/mode/javascript");
|
||||
this.ace.session.setUseWrapMode(true);
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
53
M/4.0/редактор/200.Пульт.js
Normal file
53
M/4.0/редактор/200.Пульт.js
Normal file
@@ -0,0 +1,53 @@
|
||||
function Пульт(события, имяОшибки, имяПерезапуска, имяОтдельно, имяСсылки, имяДокументации)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
var ошибка = document.getElementById(имяОшибки);
|
||||
мир.назначитьКнопкамСобытия(
|
||||
события,
|
||||
[
|
||||
[имяПерезапуска, "перезапустить"],
|
||||
[имяОтдельно, "запустить отдельно"],
|
||||
[имяСсылки, "скопировать ссылку"],
|
||||
[имяДокументации, "открыть документацию"],
|
||||
]
|
||||
);
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "код корректен")
|
||||
{
|
||||
this.показатьОшибку(false);
|
||||
}
|
||||
else if (событие == "код некорректен")
|
||||
{
|
||||
this.показатьОшибку(true);
|
||||
}
|
||||
else if (событие == "скопировать ссылку")
|
||||
{
|
||||
navigator.clipboard.writeText(window.location)
|
||||
.then(() => {
|
||||
UIkit.notification("Скопировали ссылку", { status: "success", timeout: 1000 });
|
||||
})
|
||||
.catch(err => {
|
||||
UIkit.notification("Не удалось скопировать ссылку :(", { status: "danger", timeout: 5000 });
|
||||
});
|
||||
}
|
||||
else if (событие == "открыть документацию")
|
||||
{
|
||||
var путь = window.location.pathname + "/../../doc/ru/index.html";
|
||||
window.open(путь);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.показатьОшибку = function(показать)
|
||||
{
|
||||
ошибка.innerHTML = показать ? "<span uk-icon=\"icon: warning\"></span>" : " ";
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
13
M/4.0/редактор/700.Муром.js
Normal file
13
M/4.0/редактор/700.Муром.js
Normal file
@@ -0,0 +1,13 @@
|
||||
function Муром()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
мир.события = new События();
|
||||
мир.состояние = new Состояние();
|
||||
мир.редактор = new Редактор(мир.события, "редактор");
|
||||
мир.пульт = new Пульт(мир.события, "ошибка", "перезапустить", "отдельно", "ссылка", "документация");
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
1
M/4.0/редактор/ace
Symbolic link
1
M/4.0/редактор/ace
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/ace
|
||||
1
M/4.0/редактор/uikit
Symbolic link
1
M/4.0/редактор/uikit
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/uikit
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
@@ -98,10 +98,12 @@
|
||||
<p>Тело представляет из себя сущность Matter.js с полной поддержкой свойств, которые можно указывать телам в Matter.js.</p>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 1. Отображение статичной платформы и падающего на неё самовара.</p>
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>
|
||||
<iframe style="width: 100%; height: 55em" src="../../4.0/редактор.html?z64=eJydU81OwkAQvvMUm0YTSaALQTyU+BQejYmlNqUIbbNd4sGQFNSDwcSrN+MbAAEhoPgKs2/kbPmxC8VEN93ddjqdb79vvjZsTkQEY9ERdyLCtUdOiVbjPAgNSh2X635ge47ZtEPeunJ93WcOvfaZZzNGm/WQMvOGVpnpWTXaNENuMyoirZLJwAdMRaRj7T5MYAEDeSe64unoNkNwwBCmMBI9gyyf49hCdOATk4fQT8blqJrWtcP8lndlkMsWaxwd3KrnblP8vAtzxBvBDPo0WU2vB072Mrep2P65xaQ+HjZOE9F/YIf4/AhTqlbSA8/JEs/PMzuwTU5Ci/mNBikcyosSy/e46Xq7Z1pt4h71meCcqVogZlcKuftGDjc84yZ3LYNw1rL31Y4rr1oC7zBGlabiWenEMuMtSWgXDb6kYOfFQiFHyjhLOE8KFzk1KW60QTRVHi21GSvcV9lGNMs99jCCD9UlCrIExuVYLsW90Ekr7AKvFe+iEvMUtRcYHUi9/8w/yexL5fSLmr9yUn2hqXbYz62D6ON1r2GscsTIp3iI3fCS5gyMviV1SDl7iqMkipZuJG2L01L5xZrPBmg7r4NF5L+2qX+eL5ZzJF9KER23drbyDT5TDHI="></iframe>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 2. Составное тело с сенсором и статичная платформа.</p>
|
||||
<iframe style="width: 100%; height: 100em" src="../../3.4/редактор.html?z64=eJy9VcFO20AQvfsrVhaViESyBJVDjfoVPSIkjHGNwbGt9UYtQpHilKpUqdRrb4g/MFHcWlDCL8z+EbOGEHvj4IhIWFHs3Zl5+97OzK5ncyL6kIpYfBN9/B+Sj0Q/4jyMDEodl7eC0PYds2NHvHvoBq2AOfQkYL7NGO0cR5SZX+gBM33riHbMiNuMir6ueQgL93ALiRiIc5jgEv8hQej9LvPW187KS/YoegykN4zhBhI5jOEOJjCCpHUcOo39nRwSZxMEyudF/wW4EY5/QkbLAa3QdxrED5rMDm2Tk8higeeRzXfyR4kV+Nx0fVxLw5gM/RE3gX8Yfi2/UMqv9TON4APZbBr+QopkM/HbII/WgsdVcX1Iih6510gMkaNUj7btzY2SVVxIFoh0J63vFStiZjBWEeVzYFonDgu6/qGhbFkZoTcbFj6fmaOqnNuKvLcqeZM64vPlo5B/gftlOVQM1cW+GkRhdSo3eI5pUWW7JjuvSk+tykKKtMIEUkplZBEfa3+A4m/hGle+qZDcVjmezudulYoUP1BKLNvEIJx1bcV6nmcnkx1etS1u9Imb3LUM8tn0InupUr1HvWMkeyHLe0nFH1ZQrNbyyoptPwpYVWy14HI3vzLFU9KQGWRXL1eNvkH08q7qe2+RRqUJ3rhfn7hMeytGOun0WIe03GMSQHzPD/4/Sx3xFVeFxNSrbwhdIf3Y5xP0VxNV9osRRN55z/i7TSxW0tza3ltUSaqQy1na50/MehmF62KxCKW26kW0F4l4emm9xs4D+tFt+Q=="></iframe>
|
||||
<p><strong>ВНИМАНИЕ</strong>: на текущий момент слежение некорректно отрабатывает для составных объектов,
|
||||
т.к. сенсор должен находиться строго под основанием самовара.</p>
|
||||
<iframe style="width: 100%; height: 80em" src="../../4.0/редактор.html?z64=eJytVM1q20AQvvspFtFCTGWtTJpCFfoUPYZAFEUoSmxJrNb0EAyym1JKCr32VvoGjokbk9jKK8y+UWclxdFGPymmi7SSVrPzzffNzA5cTkQCCzERn0WC8xX5QLRTzqPYotTzuRFGbuDZQzfmoxM/NELm0fOQBS5jdHgWU2Z/osfMDpxTOrRj7jIqEm2/04EVLEVioO8Z3EIK1/JNTMX3nYsOwQFzWMKNuLJI/p2tpWICazSew6y8Lsex7Zx7LBwFJxY5GrHBzqsLNe4xxe1TuEe8G7iDGS17M84ir3ukbzyOn17RaIbBZmYi2QZ2jt/fYElVT0YUeF0ShD3mRq7NSeywcDAg5mt5UeKEAbf9oBpT8RCXqM8t3neqFog5lUJW/8jhxx+5zX3HIpyN3Ca+C1jjnFbZ4nY3iEPWsL14ZIEVGYU/0hum+oeSyNzil8wG5vxSYsFKTXZm9yBjOOibOtkzcXorp755qKtWWalYRCtnVKslVwD/LieiqtIGNsPVyS7e7xpR1bS+gLuRth31fcazDbWd62ORTBHwXoWCB1X1lkBaVVcLUFPrrl6FzCZF+GtptZXq4iuCTOQ5sWUJ/5PKzSi1zJ/Qmni3HSEq74ZIYIkmmiqgpj8DP2ysgwnuWTz2IizUAwNX1uJL1q0/8zIto9TUR01/S59afXdpzxjlNZm2dU4R1yo7ODf+D3r9PZ30ds0qzyYirf32Io3S5v9IIudA3mBf1SZs3N3/C7eNDLk="></iframe>
|
||||
<p></div></p>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
@@ -12,13 +12,16 @@ Lang: ru
|
||||
|
||||
Пример № 1. Отображение статичной платформы и падающего на неё самовара.
|
||||
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>
|
||||
<iframe style="width: 100%; height: 55em" src="../../4.0/редактор.html?z64=eJydU81OwkAQvvMUm0YTSaALQTyU+BQejYmlNqUIbbNd4sGQFNSDwcSrN+MbAAEhoPgKs2/kbPmxC8VEN93ddjqdb79vvjZsTkQEY9ERdyLCtUdOiVbjPAgNSh2X635ge47ZtEPeunJ93WcOvfaZZzNGm/WQMvOGVpnpWTXaNENuMyoirZLJwAdMRaRj7T5MYAEDeSe64unoNkNwwBCmMBI9gyyf49hCdOATk4fQT8blqJrWtcP8lndlkMsWaxwd3KrnblP8vAtzxBvBDPo0WU2vB072Mrep2P65xaQ+HjZOE9F/YIf4/AhTqlbSA8/JEs/PMzuwTU5Ci/mNBikcyosSy/e46Xq7Z1pt4h71meCcqVogZlcKuftGDjc84yZ3LYNw1rL31Y4rr1oC7zBGlabiWenEMuMtSWgXDb6kYOfFQiFHyjhLOE8KFzk1KW60QTRVHi21GSvcV9lGNMs99jCCD9UlCrIExuVYLsW90Ekr7AKvFe+iEvMUtRcYHUi9/8w/yexL5fSLmr9yUn2hqXbYz62D6ON1r2GscsTIp3iI3fCS5gyMviV1SDl7iqMkipZuJG2L01L5xZrPBmg7r4NF5L+2qX+eL5ZzJF9KER23drbyDT5TDHI="></iframe>
|
||||
|
||||
</div><div class="contents">
|
||||
|
||||
Пример № 2. Составное тело с сенсором и статичная платформа.
|
||||
|
||||
<iframe style="width: 100%; height: 100em" src="../../3.4/редактор.html?z64=eJy9VcFO20AQvfsrVhaViESyBJVDjfoVPSIkjHGNwbGt9UYtQpHilKpUqdRrb4g/MFHcWlDCL8z+EbOGEHvj4IhIWFHs3Zl5+97OzK5ncyL6kIpYfBN9/B+Sj0Q/4jyMDEodl7eC0PYds2NHvHvoBq2AOfQkYL7NGO0cR5SZX+gBM33riHbMiNuMir6ueQgL93ALiRiIc5jgEv8hQej9LvPW187KS/YoegykN4zhBhI5jOEOJjCCpHUcOo39nRwSZxMEyudF/wW4EY5/QkbLAa3QdxrED5rMDm2Tk8higeeRzXfyR4kV+Nx0fVxLw5gM/RE3gX8Yfi2/UMqv9TON4APZbBr+QopkM/HbII/WgsdVcX1Iih6510gMkaNUj7btzY2SVVxIFoh0J63vFStiZjBWEeVzYFonDgu6/qGhbFkZoTcbFj6fmaOqnNuKvLcqeZM64vPlo5B/gftlOVQM1cW+GkRhdSo3eI5pUWW7JjuvSk+tykKKtMIEUkplZBEfa3+A4m/hGle+qZDcVjmezudulYoUP1BKLNvEIJx1bcV6nmcnkx1etS1u9Imb3LUM8tn0InupUr1HvWMkeyHLe0nFH1ZQrNbyyoptPwpYVWy14HI3vzLFU9KQGWRXL1eNvkH08q7qe2+RRqUJ3rhfn7hMeytGOun0WIe03GMSQHzPD/4/Sx3xFVeFxNSrbwhdIf3Y5xP0VxNV9osRRN55z/i7TSxW0tza3ltUSaqQy1na50/MehmF62KxCKW26kW0F4l4emm9xs4D+tFt+Q=="></iframe>
|
||||
**ВНИМАНИЕ**: на текущий момент слежение некорректно отрабатывает для составных объектов,
|
||||
т.к. сенсор должен находиться строго под основанием самовара.
|
||||
|
||||
<iframe style="width: 100%; height: 80em" src="../../4.0/редактор.html?z64=eJytVM1q20AQvvspFtFCTGWtTJpCFfoUPYZAFEUoSmxJrNb0EAyym1JKCr32VvoGjokbk9jKK8y+UWclxdFGPymmi7SSVrPzzffNzA5cTkQCCzERn0WC8xX5QLRTzqPYotTzuRFGbuDZQzfmoxM/NELm0fOQBS5jdHgWU2Z/osfMDpxTOrRj7jIqEm2/04EVLEVioO8Z3EIK1/JNTMX3nYsOwQFzWMKNuLJI/p2tpWICazSew6y8Lsex7Zx7LBwFJxY5GrHBzqsLNe4xxe1TuEe8G7iDGS17M84ir3ukbzyOn17RaIbBZmYi2QZ2jt/fYElVT0YUeF0ShD3mRq7NSeywcDAg5mt5UeKEAbf9oBpT8RCXqM8t3neqFog5lUJW/8jhxx+5zX3HIpyN3Ca+C1jjnFbZ4nY3iEPWsL14ZIEVGYU/0hum+oeSyNzil8wG5vxSYsFKTXZm9yBjOOibOtkzcXorp755qKtWWalYRCtnVKslVwD/LieiqtIGNsPVyS7e7xpR1bS+gLuRth31fcazDbWd62ORTBHwXoWCB1X1lkBaVVcLUFPrrl6FzCZF+GtptZXq4iuCTOQ5sWUJ/5PKzSi1zJ/Qmni3HSEq74ZIYIkmmiqgpj8DP2ysgwnuWTz2IizUAwNX1uJL1q0/8zIto9TUR01/S59afXdpzxjlNZm2dU4R1yo7ODf+D3r9PZ30ds0qzyYirf32Io3S5v9IIudA3mBf1SZs3N3/C7eNDLk="></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
@@ -99,10 +99,10 @@
|
||||
<p>Изображение представляет из себя отдельный <code><div></code>, который можно исследовать в отладке браузера.</p>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 1. Отображение статичного изображения под углом.</p>
|
||||
<iframe style="width: 100%; height: 25em" src="../../3.4/редактор.html?z64=eJxtkE1uwjAQhfecwmIFUpUBqWzc0xiIzE8TR46jFlVIgW6QWomrpC20UYH0CjM36hgqUSLexjPvzdifjHssKQ8oxwK/sMI3X9GSXltPDcHC8mzjJ27xwPNrKU7pceKHsxL3uKX8v+/1KEW307m58GZS1Bx8pxdaYEVLLK4s0Moj8hMHH/fq6TN+MOBOitte/Vre2dSRvPpqMNXWZPFQimZm71sj55JUAuixC0wSxlpFYeqy4dgExmqYGhuH1kI0ScGqB+hbFQ9GEKnUhRYohyP7jn9og99Y+HbBtBUTFMEk0e3mJdn83P6VfMzbdw2vX92vltE="></iframe>
|
||||
<iframe style="width: 100%; height: 20em" src="../../4.0/редактор.html?z64=eJxtUM1Kw0AQvvsUS08thEwFe1kfRTxs27D9Mdkw2eBBCrEeFXyVWFsNttZXmHkjJ0ZKIg67zOx8s3zfN3SgiouQCyrpnY70Ule85qf+3ZmSoA1VtOVHrZr3T+/I9/Qpwxsq2/06xmaytOjyZKpVL8eb/sz7NNMAdu5Dl0aJNXGU+Xw6d6FDC0uHSYQI8SIDNLcwRpNMZhCbzEcIXICQrWkv6rb0QSW0ucNFage94MS/asrfJLpPhuiNdvKr4ueOjy/BKjrQjou/PmpMq6vz4TBQckZypb4OOkP8QK9CsdfqYtRFmrXJCtp6/5W6Glx+Azw7new="></iframe>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 2. Отображение статичной платформы и падающего на неё самовара.</p>
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>
|
||||
<iframe style="width: 100%; height: 55em" src="../../4.0/редактор.html?z64=eJydU81OwkAQvvMUm0YTSaALQTyU+BQejYmlNqUIbbNd4sGQFNSDwcSrN+MbAAEhoPgKs2/kbPmxC8VEN93ddjqdb79vvjZsTkQEY9ERdyLCtUdOiVbjPAgNSh2X635ge47ZtEPeunJ93WcOvfaZZzNGm/WQMvOGVpnpWTXaNENuMyoirZLJwAdMRaRj7T5MYAEDeSe64unoNkNwwBCmMBI9gyyf49hCdOATk4fQT8blqJrWtcP8lndlkMsWaxwd3KrnblP8vAtzxBvBDPo0WU2vB072Mrep2P65xaQ+HjZOE9F/YIf4/AhTqlbSA8/JEs/PMzuwTU5Ci/mNBikcyosSy/e46Xq7Z1pt4h71meCcqVogZlcKuftGDjc84yZ3LYNw1rL31Y4rr1oC7zBGlabiWenEMuMtSWgXDb6kYOfFQiFHyjhLOE8KFzk1KW60QTRVHi21GSvcV9lGNMs99jCCD9UlCrIExuVYLsW90Ekr7AKvFe+iEvMUtRcYHUi9/8w/yexL5fSLmr9yUn2hqXbYz62D6ON1r2GscsTIp3iI3fCS5gyMviV1SDl7iqMkipZuJG2L01L5xZrPBmg7r4NF5L+2qX+eL5ZzJF9KER23drbyDT5TDHI="></iframe>
|
||||
<p></div></p>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
@@ -14,13 +14,13 @@ Lang: ru
|
||||
|
||||
Пример № 1. Отображение статичного изображения под углом.
|
||||
|
||||
<iframe style="width: 100%; height: 25em" src="../../3.4/редактор.html?z64=eJxtkE1uwjAQhfecwmIFUpUBqWzc0xiIzE8TR46jFlVIgW6QWomrpC20UYH0CjM36hgqUSLexjPvzdifjHssKQ8oxwK/sMI3X9GSXltPDcHC8mzjJ27xwPNrKU7pceKHsxL3uKX8v+/1KEW307m58GZS1Bx8pxdaYEVLLK4s0Moj8hMHH/fq6TN+MOBOitte/Vre2dSRvPpqMNXWZPFQimZm71sj55JUAuixC0wSxlpFYeqy4dgExmqYGhuH1kI0ScGqB+hbFQ9GEKnUhRYohyP7jn9og99Y+HbBtBUTFMEk0e3mJdn83P6VfMzbdw2vX92vltE="></iframe>
|
||||
<iframe style="width: 100%; height: 20em" src="../../4.0/редактор.html?z64=eJxtUM1Kw0AQvvsUS08thEwFe1kfRTxs27D9Mdkw2eBBCrEeFXyVWFsNttZXmHkjJ0ZKIg67zOx8s3zfN3SgiouQCyrpnY70Ule85qf+3ZmSoA1VtOVHrZr3T+/I9/Qpwxsq2/06xmaytOjyZKpVL8eb/sz7NNMAdu5Dl0aJNXGU+Xw6d6FDC0uHSYQI8SIDNLcwRpNMZhCbzEcIXICQrWkv6rb0QSW0ucNFage94MS/asrfJLpPhuiNdvKr4ueOjy/BKjrQjou/PmpMq6vz4TBQckZypb4OOkP8QK9CsdfqYtRFmrXJCtp6/5W6Glx+Azw7new="></iframe>
|
||||
|
||||
</div><div class="contents">
|
||||
|
||||
Пример № 2. Отображение статичной платформы и падающего на неё самовара.
|
||||
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJy9VNtKw0AQfc9XLEXBgu1WsS8Rv8JHEbrGGGPTJGy2qJRCWxWUCr76Jv5BWowGL/UXZv/I2XpLtlFEwRDC7lzOnLOzE88WRPYgkX15JHv4HZI1UtoVIoxMSh1XVIPQ9h3WsiPR3naDasAd2gy4b3NOW3sR5WyfbnHmW7u0xSJhcyp7JcNDWHiGB4jlQB7DBEs8QozQjTb3FuY6+ZJdihEDFQ03cA+x2vbhCSYwhri6FzrlxuoUEq0xAk3tsvcN3Bj3Z5DSfEI19J0y8YMKt0ObCRJZPPA8UptXLyVW4Avm+ljLwJwU4xE3hjtMH6kVSjlf6BgEH0g/zXALCZJN5YVJXr2ZiOtsfYizEdOosRwiR6UeffXaYs4rTxULRHpS3hXNi5gp3OiI6tliVtPhQdvfNrUjyyN0P7eZ5Rvzq3z35FCvdGCSpSWN06ESMcMzq1HP0DX+SuTsVftaqJExIKVEZWbx8QYNUP4DjLDyfZFonePhbOf+0lcUoTqQqkkoEu5G64IJ1zLJDvMi+0ctnTmff2/mG5v3g+8joeR9ciDJN0AByJPpbF0WzRlar7NNKpirgvlUVUrFY1nSZLxeiwnG52+DHtdHEPWj+cDfqCzXFkllub75lXKjW159Af7tOUk="></iframe>
|
||||
<iframe style="width: 100%; height: 55em" src="../../4.0/редактор.html?z64=eJydU81OwkAQvvMUm0YTSaALQTyU+BQejYmlNqUIbbNd4sGQFNSDwcSrN+MbAAEhoPgKs2/kbPmxC8VEN93ddjqdb79vvjZsTkQEY9ERdyLCtUdOiVbjPAgNSh2X635ge47ZtEPeunJ93WcOvfaZZzNGm/WQMvOGVpnpWTXaNENuMyoirZLJwAdMRaRj7T5MYAEDeSe64unoNkNwwBCmMBI9gyyf49hCdOATk4fQT8blqJrWtcP8lndlkMsWaxwd3KrnblP8vAtzxBvBDPo0WU2vB072Mrep2P65xaQ+HjZOE9F/YIf4/AhTqlbSA8/JEs/PMzuwTU5Ci/mNBikcyosSy/e46Xq7Z1pt4h71meCcqVogZlcKuftGDjc84yZ3LYNw1rL31Y4rr1oC7zBGlabiWenEMuMtSWgXDb6kYOfFQiFHyjhLOE8KFzk1KW60QTRVHi21GSvcV9lGNMs99jCCD9UlCrIExuVYLsW90Ekr7AKvFe+iEvMUtRcYHUi9/8w/yexL5fSLmr9yUn2hqXbYz62D6ON1r2GscsTIp3iI3fCS5gyMviV1SDl7iqMkipZuJG2L01L5xZrPBmg7r4NF5L+2qX+eL5ZzJF9KER23drbyDT5TDHI="></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
@@ -97,11 +97,13 @@
|
||||
<p>Ниже представлены страницы с описанием каждого отдельного поддерживаемого ключа
|
||||
и примерами их использования:</p>
|
||||
<ol>
|
||||
<li><a href="styles.html">виды</a></li>
|
||||
<li><a href="title.html">заголовок</a></li>
|
||||
<li><a href="images.html">изображения</a></li>
|
||||
<li><a href="objects.html">объекты</a></li>
|
||||
<li><a href="tracking.html">слежение</a></li>
|
||||
<li><a href="bodies.html">тела</a></li>
|
||||
<li><a href="physics.html">физика</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
@@ -7,14 +7,18 @@ Lang: ru
|
||||
Ниже представлены страницы с описанием каждого отдельного поддерживаемого ключа
|
||||
и примерами их использования:
|
||||
|
||||
1. [виды][styles]
|
||||
1. [заголовок][title]
|
||||
1. [изображения][images]
|
||||
1. [объекты][objects]
|
||||
1. [слежение][tracking]
|
||||
1. [тела][bodies]
|
||||
1. [физика][physics]
|
||||
|
||||
[bodies]: bodies.html
|
||||
[images]: images.html
|
||||
[objects]: objects.html
|
||||
[physics]: physics.html
|
||||
[styles]: styles.html
|
||||
[title]: title.html
|
||||
[tracking]: tracking.html
|
||||
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
@@ -97,7 +97,7 @@
|
||||
<p>Добавление одного или нескольких объектов, которые представляют собой комбинацию <a href="images.html">изображения</a>, <a href="bodies.html">тела</a> и их синхронизацию через <a href="tracking.html">слежение</a>.</p>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 1. Отображение двух падающих на платформу пауков.</p>
|
||||
<iframe style="width: 100%; height: 50em" src="../../3.5/редактор.html?z64=eJzNkl9OwkAQxt97io3RBBLoFsTElHgSY0IpTflT2mZbooY0KeCDsSZepRKqBAWuMHsjZysiFPDBB+Om3W1ndr7vN9tahk94CAkf8BEPcY7IBTlq+r7rqZSaLV92XMM2ta7h+b1Gy5EdZtKOw2yDMdpte5Rp17TONFtv0q7m+QajPDyqShbqwhLeIOZDfgcL9HiHGLVrPWbljvvbngHFHUOxGyYwg1i8DmAOCxhDLLddM19bS8Z8BLMfhF5gilVCbs4jSOhXiezaZp7YTpEZrqH5xNOZY1lEOREXJbpj+1rLRh8JSac8lFE5hldkeBZP2MZjri8RHGiwDqNdgqBT/qSSz2y6Y6fzzawYNypRCluRW5VUlEwMxjzCgxDNoEIpk+X3ghNp5iK7pxhTk6yxGHVN75jM6dkNdQ/qtkrw/RpIGwFESkTlv2p7xbZa0m/0gJgzRIoyoOk/UcrywZKHKrksoyj64lTB+1S5+uXJpiaHz7OwA1Q+AFQ6PyuQ4l8R4RLkqx8h+Yt9"></iframe>
|
||||
<iframe style="width: 100%; height: 45em" src="../../4.0/редактор.html?z64=eJylUd1ugjAUvucpGrIlmiBFtyULZk+xy2WJFQmiSEkp2YUxwZ+ruYdxRqdhU1/h9I1WUDeJwYvtBNpyevi+75zPszkSMSzFUIxFLNcpekBqm/MgNDF2XK7TwPYd0rNDHrVcqlPm4C5lvs0Y7nVCzMgLbjLiW23cIyG3GRaxWlcU+IK1iHWJPYMVbOE9PYmReCv1FSQD5rCGhZiaaP+d5bZiCBtZPIfZaT6NJrG6DqOR3zJRI2Je6aqf1z3A8vcRfEq+BSQww6doeidwyg3tB3Hwe4Sd1DWG5C+EH7KHeUa7EVNY4iOWHvhOGfm0wuzAJhyFFqOeh4zr9MHIoj4nrn+u57CJicRdyTfJz0GyjtIhnt+k4YaPnHDXMhFnkV2EnVnxCktIpBn56e/S4cnsRHYUS//OGGAnYhM9VQ0N3RrHpWo8a/mqzFkTqacGqPmafIdqvjH1ok/VAlW1vZhMloZuilUdcC6z1Ip6v7/TUOVfNHIblOvKN4ErWYQ="></iframe>
|
||||
<p></div></p>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
@@ -10,7 +10,7 @@ Lang: ru
|
||||
|
||||
Пример № 1. Отображение двух падающих на платформу пауков.
|
||||
|
||||
<iframe style="width: 100%; height: 50em" src="../../3.5/редактор.html?z64=eJzNkl9OwkAQxt97io3RBBLoFsTElHgSY0IpTflT2mZbooY0KeCDsSZepRKqBAWuMHsjZysiFPDBB+Om3W1ndr7vN9tahk94CAkf8BEPcY7IBTlq+r7rqZSaLV92XMM2ta7h+b1Gy5EdZtKOw2yDMdpte5Rp17TONFtv0q7m+QajPDyqShbqwhLeIOZDfgcL9HiHGLVrPWbljvvbngHFHUOxGyYwg1i8DmAOCxhDLLddM19bS8Z8BLMfhF5gilVCbs4jSOhXiezaZp7YTpEZrqH5xNOZY1lEOREXJbpj+1rLRh8JSac8lFE5hldkeBZP2MZjri8RHGiwDqNdgqBT/qSSz2y6Y6fzzawYNypRCluRW5VUlEwMxjzCgxDNoEIpk+X3ghNp5iK7pxhTk6yxGHVN75jM6dkNdQ/qtkrw/RpIGwFESkTlv2p7xbZa0m/0gJgzRIoyoOk/UcrywZKHKrksoyj64lTB+1S5+uXJpiaHz7OwA1Q+AFQ6PyuQ4l8R4RLkqx8h+Yt9"></iframe>
|
||||
<iframe style="width: 100%; height: 45em" src="../../4.0/редактор.html?z64=eJylUd1ugjAUvucpGrIlmiBFtyULZk+xy2WJFQmiSEkp2YUxwZ+ruYdxRqdhU1/h9I1WUDeJwYvtBNpyevi+75zPszkSMSzFUIxFLNcpekBqm/MgNDF2XK7TwPYd0rNDHrVcqlPm4C5lvs0Y7nVCzMgLbjLiW23cIyG3GRaxWlcU+IK1iHWJPYMVbOE9PYmReCv1FSQD5rCGhZiaaP+d5bZiCBtZPIfZaT6NJrG6DqOR3zJRI2Je6aqf1z3A8vcRfEq+BSQww6doeidwyg3tB3Hwe4Sd1DWG5C+EH7KHeUa7EVNY4iOWHvhOGfm0wuzAJhyFFqOeh4zr9MHIoj4nrn+u57CJicRdyTfJz0GyjtIhnt+k4YaPnHDXMhFnkV2EnVnxCktIpBn56e/S4cnsRHYUS//OGGAnYhM9VQ0N3RrHpWo8a/mqzFkTqacGqPmafIdqvjH1ok/VAlW1vZhMloZuilUdcC6z1Ip6v7/TUOVfNHIblOvKN4ErWYQ="></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
111
M/doc/ru/physics.html
Normal file
111
M/doc/ru/physics.html
Normal file
@@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<head>
|
||||
<style>
|
||||
#header
|
||||
{
|
||||
background: #bababf;
|
||||
padding: 0.7em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#header a
|
||||
{
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
padding: 0.5em 1em 0.5em 1em;
|
||||
}
|
||||
#title
|
||||
{
|
||||
color: #433729;
|
||||
}
|
||||
html
|
||||
{
|
||||
font-family: sans-serif;
|
||||
}
|
||||
body
|
||||
{
|
||||
line-height: 1.5em;
|
||||
}
|
||||
body
|
||||
{
|
||||
background: #FAFAFA;
|
||||
}
|
||||
table
|
||||
{
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table, th, td
|
||||
{
|
||||
border: 1px solid #aaa;
|
||||
padding: 0.5em;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
code, pre
|
||||
{
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
color: #7f0a0c;
|
||||
background: #f5f5f5;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
video
|
||||
{
|
||||
width: 100%;
|
||||
}
|
||||
.contents
|
||||
{
|
||||
background: #FFFFFF;
|
||||
width: 720px;
|
||||
padding: 1em;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 2em;
|
||||
border: 1px solid #E0E0E0;
|
||||
text-align: left;
|
||||
color: #444;
|
||||
}
|
||||
#footer
|
||||
{
|
||||
text-align: center;
|
||||
}
|
||||
#lang
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
<center>
|
||||
<h1>
|
||||
физика
|
||||
</h1>
|
||||
</center>
|
||||
<center>
|
||||
<div class="contents">
|
||||
<p>Задание одного или нескольких настроек физики Matter.js, которые будут применяться для конкретного <a href="bodies.html">тела</a> или <a href="objects.html">объекта</a>.</p>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 1. Маски столкновений.</p>
|
||||
<iframe style="width: 100%; height: 60em" src="../../4.0/редактор.html?z64=eJydlNFK40AUhu/7FEPwogXN1Lp7sZG9XfDaG0EEY4zp2DQpkynLIoW0ioIVvPV6n6CWZg3Rtq9w5o32TNrVpklE90AnaSb9zzf/+alrCyJDiGRfXsoQ1yH5TrSmEJ3AoNRhQvc7tueYbTsQ3VPm6z53aMvnns05bZ8HlJs/6Qk3PatJ22YgbE5lqO1WKvACsQx11B7BE8zgUd3JgbyrXlQIFowhhokcGmTxPX02k32Y4stjGK0+V3ViWi2H+13v1CDHXe5WNy6y3D2KPx/AM/abQAIjuqqmn3ec2vHmq2Lv7RbmyHUJyf80/INnGKdtp3IIEf2npXe8TDtVAk0KznzeNogWWKZrH1R3aloOaXmRVyj9hJ8kawU2Higf8zuqWLAvTMEsA7t17eLjPkKEwg/oTITnuEahOCeD0xXMNMied8Y8Jn4VK70gSF9hwG/UfM7jWL7rsoD53g/mYjLWt1VhZloGaWSt6pW5knqyzBKaH+EhYnmfidBcgWDOrnAsoUJc7wpzGRrkcLu+SXa+4fKljkujfpRFWMQTR7WaovJpDfIGfIokhUiX7XWSbBK0bABKiVKXbpEqQYLhGldh3pc0jQVEioMOlfuylNHepS1KW545FU7U/wWqxvKmDO0rEm01PsBWPLMivlyGCx3t1Xb/AtFw/7E="></iframe>
|
||||
<p></div></p>
|
||||
</div>
|
||||
</center>
|
||||
<div id="footer">
|
||||
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
|
||||
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
|
||||
этого исходного кода</a>.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
18
M/doc/ru/physics.md
Normal file
18
M/doc/ru/physics.md
Normal file
@@ -0,0 +1,18 @@
|
||||
Title: физика
|
||||
Date: 2021-10-12 00:00
|
||||
Category: Страница
|
||||
Slug: physics
|
||||
Lang: ru
|
||||
|
||||
Задание одного или нескольких настроек физики Matter.js, которые будут применяться для конкретного [тела][bodies] или [объекта][objects].
|
||||
|
||||
</div><div class="contents">
|
||||
|
||||
Пример № 1. Маски столкновений.
|
||||
|
||||
<iframe style="width: 100%; height: 60em" src="../../4.0/редактор.html?z64=eJydlNFK40AUhu/7FEPwogXN1Lp7sZG9XfDaG0EEY4zp2DQpkynLIoW0ioIVvPV6n6CWZg3Rtq9w5o32TNrVpklE90AnaSb9zzf/+alrCyJDiGRfXsoQ1yH5TrSmEJ3AoNRhQvc7tueYbTsQ3VPm6z53aMvnns05bZ8HlJs/6Qk3PatJ22YgbE5lqO1WKvACsQx11B7BE8zgUd3JgbyrXlQIFowhhokcGmTxPX02k32Y4stjGK0+V3ViWi2H+13v1CDHXe5WNy6y3D2KPx/AM/abQAIjuqqmn3ec2vHmq2Lv7RbmyHUJyf80/INnGKdtp3IIEf2npXe8TDtVAk0KznzeNogWWKZrH1R3aloOaXmRVyj9hJ8kawU2Higf8zuqWLAvTMEsA7t17eLjPkKEwg/oTITnuEahOCeD0xXMNMied8Y8Jn4VK70gSF9hwG/UfM7jWL7rsoD53g/mYjLWt1VhZloGaWSt6pW5knqyzBKaH+EhYnmfidBcgWDOrnAsoUJc7wpzGRrkcLu+SXa+4fKljkujfpRFWMQTR7WaovJpDfIGfIokhUiX7XWSbBK0bABKiVKXbpEqQYLhGldh3pc0jQVEioMOlfuylNHepS1KW545FU7U/wWqxvKmDO0rEm01PsBWPLMivlyGCx3t1Xb/AtFw/7E="></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
[bodies]: bodies.html
|
||||
[objects]: objects.html
|
||||
111
M/doc/ru/styles.html
Normal file
111
M/doc/ru/styles.html
Normal file
@@ -0,0 +1,111 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<head>
|
||||
<style>
|
||||
#header
|
||||
{
|
||||
background: #bababf;
|
||||
padding: 0.7em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#header a
|
||||
{
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
padding: 0.5em 1em 0.5em 1em;
|
||||
}
|
||||
#title
|
||||
{
|
||||
color: #433729;
|
||||
}
|
||||
html
|
||||
{
|
||||
font-family: sans-serif;
|
||||
}
|
||||
body
|
||||
{
|
||||
line-height: 1.5em;
|
||||
}
|
||||
body
|
||||
{
|
||||
background: #FAFAFA;
|
||||
}
|
||||
table
|
||||
{
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
table, th, td
|
||||
{
|
||||
border: 1px solid #aaa;
|
||||
padding: 0.5em;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
code, pre
|
||||
{
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
color: #7f0a0c;
|
||||
background: #f5f5f5;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
video
|
||||
{
|
||||
width: 100%;
|
||||
}
|
||||
.contents
|
||||
{
|
||||
background: #FFFFFF;
|
||||
width: 720px;
|
||||
padding: 1em;
|
||||
margin-top: 2em;
|
||||
margin-bottom: 2em;
|
||||
border: 1px solid #E0E0E0;
|
||||
text-align: left;
|
||||
color: #444;
|
||||
}
|
||||
#footer
|
||||
{
|
||||
text-align: center;
|
||||
}
|
||||
#lang
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
<center>
|
||||
<h1>
|
||||
виды
|
||||
</h1>
|
||||
</center>
|
||||
<center>
|
||||
<div class="contents">
|
||||
<p>Задание одного или нескольких стилей CSS, которые будут применяться для конкретного <a href="images.html">изображения</a> или <a href="objects.html">объекта</a>.</p>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 1. Задание стилей для изображения и объекта.</p>
|
||||
<iframe style="width: 100%; height: 48em" src="../../4.0/редактор.html?z64=eJydU8tugkAU3fMVE9KFJpbx0S6K6Vd006RpIiLFJ5hhSBfGBB9Jk9qkv2KNVoJVf+HOH/WCthUp6eMmXAYYzjn3HGgbnAgPFmIgRsLDPiGXRK5z3nVUSs0GV+yuYZlax3C4W2vYis1M2rKZZTBGO02HMu2eVplm6XXa0RxuMCo8uSxJ8Aa+8BTEnsISNvASrsRQPGV6EsGCGfgwFxOV7K6jexsxgDVunsH08H5YVU1vmcx2rZpKKi5rZ056cd19iq8PYYV8cwhgSg/RlGbXzFZyn4j9ryVsUdcIgv8QvuIMs4h2LSawoB9YSteK0YXF0STnzmYdlciOrrWN60wpKyck7U9ijNBLPIK4FUg8DH1MPgmr4VxxjTd0FdlcIw07Qt4ngiMs0CRfPMeC2IY+YlpjHM7DKBNMsBWeSm4K+RwpXWA7y2Mr5m/jM+9CxoEPs0ifeYhaVnGuPymJREStcKwk7qcctzFVUeTSI6oKUMHkSNe3X81eTXEnIpKDDqX7sodJKoi2BeE/hHt88ZBGdI74p8VfMP2UQD9blt4BwuOSOQ=="></iframe>
|
||||
<p></div></p>
|
||||
</div>
|
||||
</center>
|
||||
<div id="footer">
|
||||
Документация сгенерирована <a href="http://opengamestudio.org/pskov">ПСКОВОМ</a>
|
||||
из <a href="https://git.opengamestudio.org/kornerr/MYPOM/src/branch/master/doc">
|
||||
этого исходного кода</a>.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
18
M/doc/ru/styles.md
Normal file
18
M/doc/ru/styles.md
Normal file
@@ -0,0 +1,18 @@
|
||||
Title: виды
|
||||
Date: 2021-10-12 00:00
|
||||
Category: Страница
|
||||
Slug: styles
|
||||
Lang: ru
|
||||
|
||||
Задание одного или нескольких стилей CSS, которые будут применяться для конкретного [изображения][images] или [объекта][objects].
|
||||
|
||||
</div><div class="contents">
|
||||
|
||||
Пример № 1. Задание стилей для изображения и объекта.
|
||||
|
||||
<iframe style="width: 100%; height: 48em" src="../../4.0/редактор.html?z64=eJydU8tugkAU3fMVE9KFJpbx0S6K6Vd006RpIiLFJ5hhSBfGBB9Jk9qkv2KNVoJVf+HOH/WCthUp6eMmXAYYzjn3HGgbnAgPFmIgRsLDPiGXRK5z3nVUSs0GV+yuYZlax3C4W2vYis1M2rKZZTBGO02HMu2eVplm6XXa0RxuMCo8uSxJ8Aa+8BTEnsISNvASrsRQPGV6EsGCGfgwFxOV7K6jexsxgDVunsH08H5YVU1vmcx2rZpKKi5rZ056cd19iq8PYYV8cwhgSg/RlGbXzFZyn4j9ryVsUdcIgv8QvuIMs4h2LSawoB9YSteK0YXF0STnzmYdlciOrrWN60wpKyck7U9ijNBLPIK4FUg8DH1MPgmr4VxxjTd0FdlcIw07Qt4ngiMs0CRfPMeC2IY+YlpjHM7DKBNMsBWeSm4K+RwpXWA7y2Mr5m/jM+9CxoEPs0ifeYhaVnGuPymJREStcKwk7qcctzFVUeTSI6oKUMHkSNe3X81eTXEnIpKDDqX7sodJKoi2BeE/hHt88ZBGdI74p8VfMP2UQD9blt4BwuOSOQ=="></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
[images]: images.html
|
||||
[objects]: objects.html
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
|
||||
@@ -78,12 +78,12 @@
|
||||
}
|
||||
</style>
|
||||
<title>
|
||||
Документация МУРОМа-3.5
|
||||
Документация МУРОМа 4.0
|
||||
</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="header">
|
||||
<strong id="title">Документация МУРОМа-3.5</strong>
|
||||
<strong id="title">Документация МУРОМа 4.0</strong>
|
||||
<a href="http://opengamestudio.org/M">МУРОМ</a>
|
||||
<a href="keys.html">Ключи (API)</a>
|
||||
</div>
|
||||
@@ -95,12 +95,13 @@
|
||||
<center>
|
||||
<div class="contents">
|
||||
<p>Синхронизация изображения с телом. Исполняется каждый кадр.</p>
|
||||
<p><strong>ВНИМАНИЕ</strong>: на текущий момент некорректно работает с составными телами: не учитывается вращение частей.</p>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 1. Мгновенное следование изображения за телом.</p>
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVFtKw0AU/c8qhqLQgs3UYn8irsJPETqNMU1NkzCZoiKFtiooFVyDO4il0eCjbuHOjrxTX3lYFf1yCGFm7r3nnpMzE9cSRA4glkN5LAf4HpMNUmoLEYQGpbYjdD+wPJt1rVD0dhxf97lN93zuWZzTbieknO3TFmee2aZdFgqLUzkoaS7CwhPcQyRH8gRm2OIBIoRu9rhbXjrKtuxTzBipbJjCHURqOYRHmMEEIr0T2JXm+hwSdyMEmu/LwRdwE1yfQ0KzBXrg2RXi+VVuBRYTJDS577qktqweSkzfE8zxsJeGNQnmI24Et1h+rWYo5aJ8pBEckHxsww3ESDaRlwZ5iaqR7ZyOzOsncowZSnVkkEZtJROVZ6o79nhU0bVcFBETmOYR1Wgxc8/mfs/bMXL9swj9j2VqWvQr3+PAIDkuh4pegV9a2+o32n4lrkh1sUAttYGUYlX5c6MOlIKi6Lxjf/ETRajTlKiT/5lwJ9wUTDimQXaZG1r/wspXLm+ffYh04rd7AnHu8yOAPJ3fpKu0FUXSn906hVbKeljK0XwxffZt3hBD6rfxjrtVrddWSLXe2F6kTOtX1p8Bv1gVxQ=="></iframe>
|
||||
<iframe style="width: 100%; height: 55em" src="../../4.0/редактор.html?z64=eJydU81OwkAQvvMUm0YTSaALQTyU+BQejYmlNqUIbbNd4sGQFNSDwcSrN+MbAAEhoPgKs2/kbPmxC8VEN93ddjqdb79vvjZsTkQEY9ERdyLCtUdOiVbjPAgNSh2X635ge47ZtEPeunJ93WcOvfaZZzNGm/WQMvOGVpnpWTXaNENuMyoirZLJwAdMRaRj7T5MYAEDeSe64unoNkNwwBCmMBI9gyyf49hCdOATk4fQT8blqJrWtcP8lndlkMsWaxwd3KrnblP8vAtzxBvBDPo0WU2vB072Mrep2P65xaQ+HjZOE9F/YIf4/AhTqlbSA8/JEs/PMzuwTU5Ci/mNBikcyosSy/e46Xq7Z1pt4h71meCcqVogZlcKuftGDjc84yZ3LYNw1rL31Y4rr1oC7zBGlabiWenEMuMtSWgXDb6kYOfFQiFHyjhLOE8KFzk1KW60QTRVHi21GSvcV9lGNMs99jCCD9UlCrIExuVYLsW90Ekr7AKvFe+iEvMUtRcYHUi9/8w/yexL5fSLmr9yUn2hqXbYz62D6ON1r2GscsTIp3iI3fCS5gyMviV1SDl7iqMkipZuJG2L01L5xZrPBmg7r4NF5L+2qX+eL5ZzJF9KER23drbyDT5TDHI="></iframe>
|
||||
<p></div><div class="contents"></p>
|
||||
<p>Пример № 2. Замедленное следование изображения за телом со смещением и пределом для ограничения мельтешения.</p>
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVF1O20AQfs8pVlGRiJR4AyovRj1FHxESi3GNE8e21hsRFEVKKEggkDhDb+BGuLXSEq4we6POmNLYa/4ET11FkXdn5pvvm9mdwFVMTyHTM/1VT/H/kn1izUOl4sTm3POVFcVu6ImBm6jhgR9ZkfR4P5KhKyUf9BIuxRHflyJ0DvlAJMqVXE+bjQBh4Q5+QapP9CksMcVvSBF6byiD9Q/jasoJR48T8oYbWEBK2xncwhLmkFq92GvtbReQeJoiUHGup8/AzXF/ATmvBlhx6LVYGHWkG7tCscSRURCw7hr9OHOiUAk/xFwNjMnRH3FT+Inh3+kLpVytjxsMF+SrY/gBGZLN9bXN7q20qpnLliJ+ri/Rg1SnNtvqtitWfU7ZMcctWT8aVkTM4cZEpLUvnL4no2F4YBv5qwiT1bb0We+XmWNkM4PLMdGr8Str23hB25vE1ak+LbBROkBKGUW+vlEjUlAXbXbsPf1EEXSbcrr5jwn3k89KKN+x2RcRJO5/0cq/XB7KPkM62cM7gcwoPwLos+IlfSu3ok76sVdHaM1qD5sGzfumL1/0m6GJxsY/3J3OZrfNOptbuzXPRVFYHFM0FLCWVnfDKN0dDSWcZ5i7eiNWtZm0tv8AHwUuww=="></iframe>
|
||||
<iframe style="width: 100%; height: 60em" src="../../4.0/редактор.html?z64=eJydU81Kw0AQvvcplqBgIc2m+HOI+BQeRTDGEGPbJGy2eJBCUvUgCl69iW9QS6vFanyF2TdyNv0xa1JBl+wmmU6/b+abL22XE5HAWKTiUiR43pI9op1yHsUWpZ7PjTByA8/uuDHvnvihETKPtkIWuIzRzllMmX1Oj5kdOKe0Y8fcZVQk2m6tBu8wEYmB2AN4hQye5ZPoi7uNixrBBUOYwEjcWmT2nscykcIHJg9hUIzLdWw7LY+F3eDEIkdd1t5Yu1Dr7lH8ex+myDeCNxjQIppxFnn1I32J2Pt+xKQBFpunieQ/tEN8v4EJVZGMKPDqJAgbzI1cm5PYYWG7Tcx1eVHihAG3/aBc0/wmrlCfV9xvqhbI2ZdCln+Ry4/3uc19xyKcdd1V2DnyfCTwAmNUaSLulUnMMp6KDZXZ4FMKdtA0TZ1s497EvWMe6mpSPmiLaKo8WuUw5ryPcoxoliucYQLvqksUZkmMx5Y8miupi1YoEy8U76MS0wq1M4w+S73/3H+xs0+1p1/U/LUn1ReaaofVvaXIPl7MGsZqjxj5ENe5Gx6qnIHRp6IOFbVXOEqyaNVG0n70NFM+W/SzJPqZlyKI/NaW+AeN5rZOGpsllVKsUuqcSUBxZxHTMJt6SW9EGkluS86vQrteffcLwysl+g=="></iframe>
|
||||
<p></div></p>
|
||||
</div>
|
||||
</center>
|
||||
|
||||
@@ -6,17 +6,19 @@ Lang: ru
|
||||
|
||||
Синхронизация изображения с телом. Исполняется каждый кадр.
|
||||
|
||||
**ВНИМАНИЕ**: на текущий момент некорректно работает с составными телами: не учитывается вращение частей.
|
||||
|
||||
</div><div class="contents">
|
||||
|
||||
Пример № 1. Мгновенное следование изображения за телом.
|
||||
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVFtKw0AU/c8qhqLQgs3UYn8irsJPETqNMU1NkzCZoiKFtiooFVyDO4il0eCjbuHOjrxTX3lYFf1yCGFm7r3nnpMzE9cSRA4glkN5LAf4HpMNUmoLEYQGpbYjdD+wPJt1rVD0dhxf97lN93zuWZzTbieknO3TFmee2aZdFgqLUzkoaS7CwhPcQyRH8gRm2OIBIoRu9rhbXjrKtuxTzBipbJjCHURqOYRHmMEEIr0T2JXm+hwSdyMEmu/LwRdwE1yfQ0KzBXrg2RXi+VVuBRYTJDS577qktqweSkzfE8zxsJeGNQnmI24Et1h+rWYo5aJ8pBEckHxsww3ESDaRlwZ5iaqR7ZyOzOsncowZSnVkkEZtJROVZ6o79nhU0bVcFBETmOYR1Wgxc8/mfs/bMXL9swj9j2VqWvQr3+PAIDkuh4pegV9a2+o32n4lrkh1sUAttYGUYlX5c6MOlIKi6Lxjf/ETRajTlKiT/5lwJ9wUTDimQXaZG1r/wspXLm+ffYh04rd7AnHu8yOAPJ3fpKu0FUXSn906hVbKeljK0XwxffZt3hBD6rfxjrtVrddWSLXe2F6kTOtX1p8Bv1gVxQ=="></iframe>
|
||||
<iframe style="width: 100%; height: 55em" src="../../4.0/редактор.html?z64=eJydU81OwkAQvvMUm0YTSaALQTyU+BQejYmlNqUIbbNd4sGQFNSDwcSrN+MbAAEhoPgKs2/kbPmxC8VEN93ddjqdb79vvjZsTkQEY9ERdyLCtUdOiVbjPAgNSh2X635ge47ZtEPeunJ93WcOvfaZZzNGm/WQMvOGVpnpWTXaNENuMyoirZLJwAdMRaRj7T5MYAEDeSe64unoNkNwwBCmMBI9gyyf49hCdOATk4fQT8blqJrWtcP8lndlkMsWaxwd3KrnblP8vAtzxBvBDPo0WU2vB072Mrep2P65xaQ+HjZOE9F/YIf4/AhTqlbSA8/JEs/PMzuwTU5Ci/mNBikcyosSy/e46Xq7Z1pt4h71meCcqVogZlcKuftGDjc84yZ3LYNw1rL31Y4rr1oC7zBGlabiWenEMuMtSWgXDb6kYOfFQiFHyjhLOE8KFzk1KW60QTRVHi21GSvcV9lGNMs99jCCD9UlCrIExuVYLsW90Ekr7AKvFe+iEvMUtRcYHUi9/8w/yexL5fSLmr9yUn2hqXbYz62D6ON1r2GscsTIp3iI3fCS5gyMviV1SDl7iqMkipZuJG2L01L5xZrPBmg7r4NF5L+2qX+eL5ZzJF9KER23drbyDT5TDHI="></iframe>
|
||||
|
||||
</div><div class="contents">
|
||||
|
||||
Пример № 2. Замедленное следование изображения за телом со смещением и пределом для ограничения мельтешения.
|
||||
|
||||
<iframe style="width: 100%; height: 60em" src="../../3.4/редактор.html?z64=eJzVVF1O20AQfs8pVlGRiJR4AyovRj1FHxESi3GNE8e21hsRFEVKKEggkDhDb+BGuLXSEq4we6POmNLYa/4ET11FkXdn5pvvm9mdwFVMTyHTM/1VT/H/kn1izUOl4sTm3POVFcVu6ImBm6jhgR9ZkfR4P5KhKyUf9BIuxRHflyJ0DvlAJMqVXE+bjQBh4Q5+QapP9CksMcVvSBF6byiD9Q/jasoJR48T8oYbWEBK2xncwhLmkFq92GvtbReQeJoiUHGup8/AzXF/ATmvBlhx6LVYGHWkG7tCscSRURCw7hr9OHOiUAk/xFwNjMnRH3FT+Inh3+kLpVytjxsMF+SrY/gBGZLN9bXN7q20qpnLliJ+ri/Rg1SnNtvqtitWfU7ZMcctWT8aVkTM4cZEpLUvnL4no2F4YBv5qwiT1bb0We+XmWNkM4PLMdGr8Str23hB25vE1ak+LbBROkBKGUW+vlEjUlAXbXbsPf1EEXSbcrr5jwn3k89KKN+x2RcRJO5/0cq/XB7KPkM62cM7gcwoPwLos+IlfSu3ok76sVdHaM1qD5sGzfumL1/0m6GJxsY/3J3OZrfNOptbuzXPRVFYHFM0FLCWVnfDKN0dDSWcZ5i7eiNWtZm0tv8AHwUuww=="></iframe>
|
||||
<iframe style="width: 100%; height: 60em" src="../../4.0/редактор.html?z64=eJydU81Kw0AQvvcplqBgIc2m+HOI+BQeRTDGEGPbJGy2eJBCUvUgCl69iW9QS6vFanyF2TdyNv0xa1JBl+wmmU6/b+abL22XE5HAWKTiUiR43pI9op1yHsUWpZ7PjTByA8/uuDHvnvihETKPtkIWuIzRzllMmX1Oj5kdOKe0Y8fcZVQk2m6tBu8wEYmB2AN4hQye5ZPoi7uNixrBBUOYwEjcWmT2nscykcIHJg9hUIzLdWw7LY+F3eDEIkdd1t5Yu1Dr7lH8ex+myDeCNxjQIppxFnn1I32J2Pt+xKQBFpunieQ/tEN8v4EJVZGMKPDqJAgbzI1cm5PYYWG7Tcx1eVHihAG3/aBc0/wmrlCfV9xvqhbI2ZdCln+Ry4/3uc19xyKcdd1V2DnyfCTwAmNUaSLulUnMMp6KDZXZ4FMKdtA0TZ1s497EvWMe6mpSPmiLaKo8WuUw5ryPcoxoliucYQLvqksUZkmMx5Y8miupi1YoEy8U76MS0wq1M4w+S73/3H+xs0+1p1/U/LUn1ReaaofVvaXIPl7MGsZqjxj5ENe5Gx6qnIHRp6IOFbVXOEqyaNVG0n70NFM+W/SzJPqZlyKI/NaW+AeN5rZOGpsllVKsUuqcSUBxZxHTMJt6SW9EGkluS86vQrteffcLwysl+g=="></iframe>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta http-equiv="refresh" content="0; URL='3.5/редактор.html'"/>
|
||||
<meta http-equiv="refresh" content="0; URL='4.0/редактор.html'"/>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user