K 0.8.0
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<title>К 0.7.0</title>
|
||||
<title>К 0.8.0</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/phaser@3.54.0/dist/phaser.min.js"></script>
|
||||
<style>
|
||||
html, body {
|
||||
@@ -27,10 +27,12 @@
|
||||
<div id="родитель"></div>
|
||||
<script src="игра/001.мир.js"></script>
|
||||
<script src="игра/011.phaser.js"></script>
|
||||
<script src="игра/100.структура.js"></script>
|
||||
<script src="игра/108.группы.js"></script>
|
||||
<script src="игра/109.управление.js"></script>
|
||||
<script src="игра/110.колобок.js"></script>
|
||||
<script src="игра/111.изба.js"></script>
|
||||
<script src="игра/200.отладка.js"></script>
|
||||
<script src="игра/499.пуск.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
55
К/игра/100.структура.js
Normal file
55
К/игра/100.структура.js
Normal file
@@ -0,0 +1,55 @@
|
||||
function создатьУзлыСценыПоСтруктуре(структура)
|
||||
{
|
||||
for (var имя in структура)
|
||||
{
|
||||
var узел = null;
|
||||
var описание = структура[имя];
|
||||
|
||||
var свойства = {};
|
||||
Object.assign(свойства, описание);
|
||||
delete свойства["тип"];
|
||||
delete свойства["x"];
|
||||
delete свойства["y"];
|
||||
delete свойства["texture"];
|
||||
delete свойства["группы"];
|
||||
|
||||
// Создаём узел.
|
||||
if (описание.тип == "изображение")
|
||||
{
|
||||
узел = описание.родитель.add.image(описание.x, описание.y, описание.texture);
|
||||
}
|
||||
else if (описание.тип == "платформа")
|
||||
{
|
||||
узел = описание.родитель.create(описание.x, описание.y, описание.texture);
|
||||
}
|
||||
else if (описание.тип == "спрайт")
|
||||
{
|
||||
узел = описание.родитель.add.sprite(описание.x, описание.y, описание.texture);
|
||||
}
|
||||
|
||||
// Помещаем в группы.
|
||||
for (var номер in описание.группы)
|
||||
{
|
||||
var группа = описание.группы[номер];
|
||||
группа.add(узел);
|
||||
}
|
||||
|
||||
// Задаём имя.
|
||||
узел.name = имя;
|
||||
|
||||
// Выставляем оставшиеся невыставленными свойства.
|
||||
for (var свойство in свойства)
|
||||
{
|
||||
var значение = свойства[свойство];
|
||||
узел[свойство] = значение;
|
||||
}
|
||||
|
||||
// Необходимо после смены originX/Y.
|
||||
узел.updateDisplayOrigin();
|
||||
// Необходимо для статических физических объектов.
|
||||
if ("refreshBody" in узел)
|
||||
{
|
||||
узел.refreshBody();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,9 @@
|
||||
мир.каркас = мир.сцена.physics.add.staticGroup();
|
||||
мир.платформы = мир.сцена.physics.add.staticGroup();
|
||||
мир.вещи = мир.сцена.add.group();
|
||||
мир.вещиНедвижимые = мир.сцена.add.group();
|
||||
мир.враги = мир.сцена.physics.add.group({ allowGravity: false });
|
||||
мир.стрелы = мир.сцена.physics.add.staticGroup();
|
||||
};
|
||||
|
||||
|
||||
@@ -24,6 +26,8 @@
|
||||
{
|
||||
мир.сцена.physics.add.collider(мир.вещи, мир.каркас);
|
||||
мир.сцена.physics.add.collider(мир.вещи, мир.платформы);
|
||||
мир.сцена.physics.add.collider(мир.вещиНедвижимые, мир.каркас);
|
||||
мир.сцена.physics.add.collider(мир.вещиНедвижимые, мир.платформы);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -39,14 +39,13 @@
|
||||
const камера = мир.сцена.cameras.main;
|
||||
камера.startFollow(мир.колобок, false, 0.1, 0.1);
|
||||
|
||||
мир.состояниеКолобка = {
|
||||
мигать: false,
|
||||
мигание: { },
|
||||
прыгучесть: -570,
|
||||
коэффициентПрыгучести: 1,
|
||||
прыжок: false,
|
||||
скоростьПадения: 0,
|
||||
};
|
||||
// Состояние.
|
||||
мир.колобок["мигать"] = false;
|
||||
мир.колобок["мигание"] = { };
|
||||
мир.колобок["прыгучесть"] = -570;
|
||||
мир.колобок["коэффициентПрыгучести"] = 1;
|
||||
мир.колобок["прыжок"] = false;
|
||||
мир.колобок["скоростьПадения"] = 0;
|
||||
};
|
||||
|
||||
|
||||
@@ -81,9 +80,17 @@
|
||||
НастроитьСтолкновениеКолобка = мир =>
|
||||
{
|
||||
мир.сцена.physics.add.collider(мир.колобок, мир.каркас);
|
||||
мир.столкновениеВещи = мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
|
||||
мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);
|
||||
|
||||
мир.столкновениеВещи = мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
|
||||
мир.столкновениеВещи.collideCallback = function(a, вещь) {
|
||||
if (мир.колобок.body.touching.down && вещь.body.touching.up && мир.колобок.прыжок)
|
||||
{
|
||||
мир.колобок.вещь = вещь.name;
|
||||
мир.уведомить("колобок прыгнул на вещь");
|
||||
}
|
||||
};
|
||||
|
||||
var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
|
||||
столкновениеВраги.overlapOnly = true;
|
||||
столкновениеВраги.collideCallback = function(a, b) {
|
||||
@@ -116,10 +123,10 @@
|
||||
}
|
||||
мир.колобок.setVelocityX(x);
|
||||
|
||||
if (мир.управление.прыжок && !мир.состояниеКолобка.прыжок)
|
||||
if (мир.управление.прыжок && !мир.колобок.прыжок)
|
||||
{
|
||||
мир.состояниеКолобка.прыжок = true;
|
||||
var скорость = мир.состояниеКолобка.прыгучесть * мир.состояниеКолобка.коэффициентПрыгучести;
|
||||
мир.колобок.прыжок = true;
|
||||
var скорость = мир.колобок.прыгучесть * мир.колобок.коэффициентПрыгучести;
|
||||
мир.колобок.setVelocityY(скорость);
|
||||
мир.уведомить("колобок начал прыжок");
|
||||
}
|
||||
@@ -140,21 +147,22 @@
|
||||
|
||||
ОпределитьОкончаниеПрыжкаКолобка = мир =>
|
||||
{
|
||||
if (!мир.состояниеКолобка.прыжок)
|
||||
if (!мир.колобок.прыжок)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var скоростьПадения = мир.колобок.body.velocity.y;
|
||||
if (
|
||||
(мир.состояниеКолобка.скоростьПадения > 40) &&
|
||||
(мир.колобок.скоростьПадения > 40) &&
|
||||
(скоростьПадения == 0) &&
|
||||
мир.колобок.body.touching.down
|
||||
) {
|
||||
мир.состояниеКолобка.прыжок = false;
|
||||
мир.уведомить("колобок закончит прыжок");
|
||||
мир.колобок.прыжок = false;
|
||||
мир.уведомить("колобок закончил прыжок");
|
||||
}
|
||||
мир.состояниеКолобка.скоростьПадения = скоростьПадения;
|
||||
мир.колобок.скоростьПадения = скоростьПадения;
|
||||
};
|
||||
|
||||
|
||||
@@ -170,7 +178,7 @@
|
||||
}
|
||||
|
||||
var надо = "колобок-неподвижен";
|
||||
if (мир.состояниеКолобка.прыжок)
|
||||
if (мир.колобок.прыжок)
|
||||
{
|
||||
надо = "колобок-прыжок";
|
||||
}
|
||||
@@ -231,7 +239,7 @@
|
||||
{
|
||||
var конец = new Date();
|
||||
конец.setSeconds(конец.getSeconds() + 6);
|
||||
мир.состояниеКолобка.мигание.окончание = конец;
|
||||
мир.колобок.мигание.окончание = конец;
|
||||
|
||||
var звук = мир.сцена.sound.get("повреждение");
|
||||
if (!звук || !звук.isPlaying)
|
||||
@@ -239,13 +247,13 @@
|
||||
мир.сцена.sound.play("повреждение");
|
||||
}
|
||||
|
||||
if (мир.состояниеКолобка.мигать)
|
||||
if (мир.колобок.мигать)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
мир.состояниеКолобка.мигать = true;
|
||||
мир.состояниеКолобка.мигание = {
|
||||
мир.колобок.мигать = true;
|
||||
мир.колобок.мигание = {
|
||||
шаг: 0.1,
|
||||
цель: 0,
|
||||
};
|
||||
@@ -259,17 +267,17 @@
|
||||
|
||||
МигатьКолобка = мир =>
|
||||
{
|
||||
if (!мир.состояниеКолобка.мигать)
|
||||
if (!мир.колобок.мигать)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var м = мир.состояниеКолобка.мигание;
|
||||
var м = мир.колобок.мигание;
|
||||
var сейчас = new Date();
|
||||
|
||||
if (м.окончание - сейчас < 0)
|
||||
{
|
||||
мир.состояниеКолобка.мигать = false;
|
||||
мир.колобок.мигать = false;
|
||||
мир.колобок.alpha = 1;
|
||||
мир.уведомить("закончили мигать колобка");
|
||||
return;
|
||||
@@ -289,7 +297,7 @@
|
||||
|
||||
УменьшитьПрыгучестьКолобка = мир =>
|
||||
{
|
||||
мир.состояниеКолобка.коэффициентПрыгучести = 0.6;
|
||||
мир.колобок.коэффициентПрыгучести = 0.6;
|
||||
};
|
||||
|
||||
|
||||
@@ -298,7 +306,7 @@
|
||||
|
||||
ВосстановитьПрыгучестьКолобка = мир =>
|
||||
{
|
||||
мир.состояниеКолобка.коэффициентПрыгучести = 1;
|
||||
мир.колобок.коэффициентПрыгучести = 1;
|
||||
};
|
||||
|
||||
|
||||
@@ -311,7 +319,7 @@
|
||||
};
|
||||
ВывестиОкончаниеПрыжкаВКонсоль = мир =>
|
||||
{
|
||||
console.debug("окончание прыжка. скорость:", мир.состояниеКолобка.скоростьПадения);
|
||||
console.debug("окончание прыжка. скорость:", мир.колобок.скоростьПадения);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -12,11 +12,14 @@
|
||||
мир.сцена.load.audio("пуск-стрелы", "ресурсы/звуки/521552__omerbhatti34__arrow-impact.mp3");
|
||||
мир.сцена.load.audio("удар-стрелы", "ресурсы/звуки/330800__czarcazas__shattering-glass-small.mp3");
|
||||
мир.сцена.load.audio("выломали-окно", "ресурсы/звуки/448004__kneeling__break-window.mp3");
|
||||
мир.сцена.load.audio("молоко-перевернули", "ресурсы/звуки/235596__tcrocker68__large-glassbottle-fall-woodfloor.wav");
|
||||
мир.сцена.load.audio("молоко-прыгнули", "ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav");
|
||||
|
||||
мир.сцена.load.image("основа", "ресурсы/отладка/основа.jpg");
|
||||
мир.сцена.load.image("линия", "ресурсы/отладка/линия_вертикальная.png");
|
||||
мир.сцена.load.image("изба", "ресурсы/сцены/изба.jpg");
|
||||
мир.сцена.load.image("молоко", "ресурсы/вещи/банка_молока.png");
|
||||
мир.сцена.load.image("лужа", "ресурсы/вещи/лужа.png");
|
||||
мир.сцена.load.image("паук", "ресурсы/животные/паук.png");
|
||||
мир.сцена.load.image("мышь", "ресурсы/животные/мышь.png");
|
||||
мир.сцена.load.image("мышь", "ресурсы/животные/мышь.png");
|
||||
@@ -30,139 +33,407 @@
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьИзбу = мир =>
|
||||
ЗадатьСтруктуруИзбы = мир =>
|
||||
{
|
||||
мир.сцена.sound.play("звук-избы", { loop: true });
|
||||
мир.изба = {
|
||||
фон: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 0,
|
||||
y: 0,
|
||||
texture: "изба",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
},
|
||||
|
||||
мир.сцена.add.image(0, 0, "изба").setOrigin(0, 0);
|
||||
|
||||
мир.разбитоеОкно = мир.сцена.add.image(1660, 183, "окно-разбито");
|
||||
мир.разбитоеОкно.setOrigin(0, 0).setScale(0.75, 0.75);
|
||||
мир.разбитоеОкно.setVisible(false);
|
||||
|
||||
мир.выломанноеОкно = мир.сцена.add.image(1660, 183, "окно-выломано");
|
||||
мир.выломанноеОкно.setOrigin(0, 0).setScale(0.75, 0.75);
|
||||
мир.выломанноеОкно.setVisible(false);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьПолыИСтеныКаркаса = мир =>
|
||||
{
|
||||
var полы = [
|
||||
{
|
||||
полДоКрышки: {
|
||||
родитель: мир.каркас,
|
||||
тип: "платформа",
|
||||
x: 0,
|
||||
y: 585,
|
||||
ширина: 43,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 43,
|
||||
visible: false,
|
||||
},
|
||||
{
|
||||
полКрышки: {
|
||||
родитель: мир.каркас,
|
||||
тип: "платформа",
|
||||
x: 300,
|
||||
y: 585,
|
||||
ширина: 30,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 30,
|
||||
visible: false,
|
||||
},
|
||||
{
|
||||
полПослеКрышки: {
|
||||
родитель: мир.каркас,
|
||||
тип: "платформа",
|
||||
x: 510,
|
||||
y: 585,
|
||||
ширина: 200,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 200,
|
||||
visible: false,
|
||||
},
|
||||
];
|
||||
for (var номер in полы)
|
||||
{
|
||||
var пол = полы[номер];
|
||||
var элемент = мир.каркас.create(пол.x, пол.y, "основа").setOrigin(0, 0);
|
||||
элемент.setScale(пол.ширина, 1).refreshBody();
|
||||
элемент.setVisible(false);
|
||||
}
|
||||
|
||||
var стены = [
|
||||
{
|
||||
леваяСтена: {
|
||||
родитель: мир.каркас,
|
||||
тип: "платформа",
|
||||
x: 0,
|
||||
y: 385,
|
||||
высота: 50,
|
||||
y: 200,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleY: 50,
|
||||
visible: false,
|
||||
},
|
||||
{
|
||||
праваяСтена: {
|
||||
родитель: мир.каркас,
|
||||
тип: "платформа",
|
||||
x: 2000,
|
||||
y: 385,
|
||||
высота: 50,
|
||||
y: 200,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleY: 50,
|
||||
visible: false,
|
||||
},
|
||||
];
|
||||
for (var номер in стены)
|
||||
{
|
||||
var стена = стены[номер];
|
||||
var элемент = мир.каркас.create(стена.x, стена.y, "основа");
|
||||
элемент.setScale(1, стена.высота).refreshBody();
|
||||
элемент.setVisible(false);
|
||||
}
|
||||
|
||||
фундаментПечи: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 583,
|
||||
y: 473,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 65,
|
||||
visible: false,
|
||||
},
|
||||
полка1: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 666,
|
||||
y: 335,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 3,
|
||||
visible: false,
|
||||
},
|
||||
полкаМолока: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 771,
|
||||
y: 335,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 3,
|
||||
visible: false,
|
||||
},
|
||||
полка3: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 862,
|
||||
y: 335,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 3,
|
||||
visible: false,
|
||||
},
|
||||
полкаСамовара: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 995,
|
||||
y: 355,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 4,
|
||||
visible: false,
|
||||
},
|
||||
лежанкаПечи: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 620,
|
||||
y: 245,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 35,
|
||||
visible: false,
|
||||
},
|
||||
основаТрубыПечи: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 950,
|
||||
y: 180,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 12,
|
||||
visible: false,
|
||||
},
|
||||
|
||||
стол: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 1270,
|
||||
y: 427,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 70,
|
||||
visible: false,
|
||||
},
|
||||
подоконник: {
|
||||
родитель: мир.платформы,
|
||||
тип: "платформа",
|
||||
x: 1690,
|
||||
y: 375,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 20,
|
||||
visible: false,
|
||||
},
|
||||
разбитоеОкно: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 1660,
|
||||
y: 183,
|
||||
texture: "окно-разбито",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 0.75,
|
||||
scaleY: 0.75,
|
||||
visible: false,
|
||||
},
|
||||
выломанноеОкно: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 1660,
|
||||
y: 183,
|
||||
texture: "окно-выломано",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 0.75,
|
||||
scaleY: 0.75,
|
||||
visible: false,
|
||||
},
|
||||
|
||||
молоко: {
|
||||
родитель: мир.сцена.physics,
|
||||
тип: "спрайт",
|
||||
группы: [мир.вещи],
|
||||
x: 785,
|
||||
y: 240,
|
||||
texture: "молоко",
|
||||
scaleX: 0.4,
|
||||
scaleY: 0.4,
|
||||
depth: 10,
|
||||
},
|
||||
лужа: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 285,
|
||||
y: 585,
|
||||
texture: "лужа",
|
||||
scaleX: 0.25,
|
||||
scaleY: 0.25,
|
||||
visible: false,
|
||||
},
|
||||
самовар: {
|
||||
родитель: мир.сцена.physics,
|
||||
тип: "спрайт",
|
||||
группы: [мир.вещи],
|
||||
x: 1003,
|
||||
y: 200,
|
||||
texture: "самовар",
|
||||
scaleX: 0.25,
|
||||
scaleY: 0.25,
|
||||
depth: 5,
|
||||
},
|
||||
|
||||
паук1: {
|
||||
родитель: мир.враги,
|
||||
тип: "платформа",
|
||||
x: 620,
|
||||
y: 345,
|
||||
texture: "паук",
|
||||
скорость: 50,
|
||||
низ: 550,
|
||||
верх: 270,
|
||||
depth: 10,
|
||||
},
|
||||
нить1: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 619,
|
||||
y: 245,
|
||||
texture: "линия",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
depth: 10,
|
||||
},
|
||||
паук2: {
|
||||
родитель: мир.враги,
|
||||
тип: "платформа",
|
||||
x: 785,
|
||||
y: 375,
|
||||
texture: "паук",
|
||||
скорость: 70,
|
||||
низ: 600,
|
||||
верх: 270,
|
||||
depth: 10,
|
||||
},
|
||||
нить2: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 784,
|
||||
y: 245,
|
||||
texture: "линия",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
depth: 10,
|
||||
},
|
||||
паук3: {
|
||||
родитель: мир.враги,
|
||||
тип: "платформа",
|
||||
x: 930,
|
||||
y: 500,
|
||||
texture: "паук",
|
||||
скорость: 70,
|
||||
низ: 550,
|
||||
верх: 270,
|
||||
depth: 10,
|
||||
},
|
||||
нить3: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 929,
|
||||
y: 245,
|
||||
texture: "линия",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
depth: 10,
|
||||
},
|
||||
паук4: {
|
||||
родитель: мир.враги,
|
||||
тип: "платформа",
|
||||
x: 1003,
|
||||
y: 250,
|
||||
texture: "паук",
|
||||
скорость: 40,
|
||||
низ: 400,
|
||||
верх: 200,
|
||||
depth: 10,
|
||||
},
|
||||
нить4: {
|
||||
родитель: мир.сцена,
|
||||
тип: "изображение",
|
||||
x: 1002,
|
||||
y: 180,
|
||||
texture: "линия",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
depth: 10,
|
||||
},
|
||||
|
||||
мышь1: {
|
||||
родитель: мир.враги,
|
||||
тип: "платформа",
|
||||
x: 350,
|
||||
y: 575,
|
||||
texture: "мышь",
|
||||
flipX: true,
|
||||
depth: 10,
|
||||
скорость: 290,
|
||||
},
|
||||
мышь2: {
|
||||
родитель: мир.враги,
|
||||
тип: "платформа",
|
||||
x: 740,
|
||||
y: 575,
|
||||
texture: "мышь",
|
||||
flipX: true,
|
||||
depth: 10,
|
||||
скорость: 375,
|
||||
},
|
||||
|
||||
кучаСтрел: {
|
||||
родитель: мир.стрелы,
|
||||
тип: "платформа",
|
||||
x: 1270,
|
||||
y: 405,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleX: 25,
|
||||
scaleY: 2,
|
||||
visible: false,
|
||||
},
|
||||
лук: {
|
||||
родитель: мир.стрелы,
|
||||
тип: "платформа",
|
||||
x: 1280,
|
||||
y: 200,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
visible: false,
|
||||
},
|
||||
пускСтрелы: {
|
||||
родитель: мир.стрелы,
|
||||
тип: "платформа",
|
||||
x: 1270,
|
||||
y: 160,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
visible: false,
|
||||
},
|
||||
границаПолётаСтрелы: {
|
||||
родитель: мир.стрелы,
|
||||
тип: "платформа",
|
||||
x: 1830,
|
||||
y: 200,
|
||||
texture: "основа",
|
||||
originX: 0,
|
||||
originY: 0,
|
||||
scaleY: 20,
|
||||
visible: false,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьПлатформы = мир =>
|
||||
ЗадатьФункциюПоискаУзлаПоИмени = мир =>
|
||||
{
|
||||
var п = [
|
||||
мир.узелСцены = function(имя) {
|
||||
return мир.сцена.children.list.find(function(элемент) {
|
||||
return элемент.name == имя;
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьИзбу = мир =>
|
||||
{
|
||||
x: 583,
|
||||
y: 473,
|
||||
ширина: 65,
|
||||
},
|
||||
// Полка 1.
|
||||
{
|
||||
x: 666,
|
||||
y: 335,
|
||||
ширина: 3,
|
||||
},
|
||||
// Полка молока.
|
||||
{
|
||||
x: 771,
|
||||
y: 335,
|
||||
ширина: 3,
|
||||
},
|
||||
// Полка 3.
|
||||
{
|
||||
x: 862,
|
||||
y: 335,
|
||||
ширина: 3,
|
||||
},
|
||||
// Полка самовара.
|
||||
{
|
||||
x: 995,
|
||||
y: 355,
|
||||
ширина: 4,
|
||||
},
|
||||
{
|
||||
x: 620,
|
||||
y: 245,
|
||||
ширина: 35,
|
||||
},
|
||||
{
|
||||
x: 950,
|
||||
y: 180,
|
||||
ширина: 12,
|
||||
},
|
||||
// Стол.
|
||||
{
|
||||
x: 1270,
|
||||
y: 427,
|
||||
ширина: 70,
|
||||
},
|
||||
// Окно.
|
||||
{
|
||||
x: 1690,
|
||||
y: 375,
|
||||
ширина: 20,
|
||||
},
|
||||
];
|
||||
for (var номер in п)
|
||||
{
|
||||
var часть = п[номер];
|
||||
var элемент = мир.платформы.create(часть.x, часть.y, "основа").setOrigin(0, 0);
|
||||
элемент.setScale(часть.ширина, 1).refreshBody();
|
||||
элемент.setVisible(false);
|
||||
}
|
||||
создатьУзлыСценыПоСтруктуре(мир.изба);
|
||||
мир.сцена.sound.play("звук-избы", { loop: true });
|
||||
};
|
||||
|
||||
|
||||
@@ -182,68 +453,22 @@
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьВещи = мир =>
|
||||
НастроитьПауков = мир =>
|
||||
{
|
||||
var молоко = мир.сцена.physics.add.sprite(785, 240, "молоко");
|
||||
молоко.setScale(0.4, 0.4).refreshBody();
|
||||
молоко.depth = 5;
|
||||
мир.вещи.add(молоко);
|
||||
|
||||
var самовар = мир.сцена.physics.add.sprite(1003, 200, "самовар");
|
||||
самовар.setScale(0.25, 0.25).refreshBody();
|
||||
самовар.depth = 5;
|
||||
мир.вещи.add(самовар);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьПауков = мир =>
|
||||
{
|
||||
мир.настройкиПауков = [
|
||||
{
|
||||
x: 620,
|
||||
y: 345,
|
||||
скорость: 50,
|
||||
низ: 550,
|
||||
верх: 270,
|
||||
},
|
||||
{
|
||||
x: 785,
|
||||
y: 375,
|
||||
скорость: 80,
|
||||
низ: 400,
|
||||
верх: 270,
|
||||
},
|
||||
{
|
||||
x: 930,
|
||||
y: 500,
|
||||
скорость: 70,
|
||||
низ: 550,
|
||||
верх: 270,
|
||||
},
|
||||
{
|
||||
x: 1003,
|
||||
y: 250,
|
||||
скорость: 40,
|
||||
низ: 400,
|
||||
верх: 200,
|
||||
},
|
||||
];
|
||||
мир.пауки = [];
|
||||
мир.нитиПауков = [];
|
||||
for (var номер in мир.настройкиПауков)
|
||||
for (var имя in мир.изба)
|
||||
{
|
||||
var настройки = мир.настройкиПауков[номер];
|
||||
var паук = мир.враги.create(настройки.x, настройки.y, "паук");
|
||||
паук.body.setVelocityY(настройки.скорость);
|
||||
паук.depth = 10;
|
||||
if (имя.startsWith("паук"))
|
||||
{
|
||||
var паук = мир.узелСцены(имя);
|
||||
var имяНити = имя.replace("паук", "нить");
|
||||
var нить = мир.узелСцены(имяНити);
|
||||
паук.body.setVelocityY(паук.скорость);
|
||||
мир.пауки.push(паук);
|
||||
var нить = мир.сцена.add.image(настройки.x - 1, настройки.верх - 25, "линия").setOrigin(0, 0);
|
||||
нить.depth = паук.depth;
|
||||
мир.нитиПауков.push(нить);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -256,14 +481,13 @@
|
||||
{
|
||||
var паук = мир.пауки[номер];
|
||||
var нить = мир.нитиПауков[номер];
|
||||
var настройки = мир.настройкиПауков[номер];
|
||||
нить.displayHeight = паук.y - нить.y - 5;
|
||||
if (паук.y > настройки.низ)
|
||||
if (паук.y > паук.низ)
|
||||
{
|
||||
паук.setVelocityY(-настройки.скорость);
|
||||
} else if (паук.y < настройки.верх)
|
||||
паук.setVelocityY(-паук.скорость);
|
||||
} else if (паук.y < паук.верх)
|
||||
{
|
||||
паук.setVelocityY(настройки.скорость);
|
||||
паук.setVelocityY(паук.скорость);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -272,30 +496,18 @@
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьМышей = мир =>
|
||||
НастроитьМышей = мир =>
|
||||
{
|
||||
мир.настройкиМышей= [
|
||||
{
|
||||
x: 350,
|
||||
y: 575,
|
||||
скорость: 290,
|
||||
},
|
||||
{
|
||||
x: 740,
|
||||
y: 575,
|
||||
скорость: 375,
|
||||
},
|
||||
];
|
||||
мир.мыши = [];
|
||||
for (var номер in мир.настройкиМышей)
|
||||
for (var имя in мир.изба)
|
||||
{
|
||||
var настройки = мир.настройкиМышей[номер];
|
||||
var мышь = мир.враги.create(настройки.x, настройки.y, "мышь");
|
||||
мышь.body.setVelocityX(настройки.скорость);
|
||||
мышь.depth = 10;
|
||||
мышь.flipX = true;
|
||||
if (имя.startsWith("мышь"))
|
||||
{
|
||||
var мышь = мир.узелСцены(имя);
|
||||
мышь.body.setVelocityX(мышь.скорость);
|
||||
мир.мыши.push(мышь);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -307,14 +519,13 @@
|
||||
for (var номер in мир.мыши)
|
||||
{
|
||||
var мышь= мир.мыши[номер];
|
||||
var скорость = мир.настройкиМышей[номер].скорость;
|
||||
if (мышь.x > 1950)
|
||||
{
|
||||
мышь.setVelocityX(-скорость);
|
||||
мышь.setVelocityX(-мышь.скорость);
|
||||
мышь.flipX = false;
|
||||
} else if (мышь.x < 50)
|
||||
{
|
||||
мышь.setVelocityX(скорость);
|
||||
мышь.setVelocityX(мышь.скорость);
|
||||
мышь.flipX = true;
|
||||
}
|
||||
}
|
||||
@@ -324,30 +535,18 @@
|
||||
// // // //
|
||||
|
||||
|
||||
СоздатьСтрелы = мир =>
|
||||
НастроитьСтрелы = мир =>
|
||||
{
|
||||
мир.пфСтрел = мир.сцена.physics.add.staticGroup();
|
||||
var куча = мир.пфСтрел.create(1270, 405, "основа").setOrigin(0, 0);
|
||||
куча.setScale(25, 2).refreshBody();
|
||||
var куча = мир.узелСцены("кучаСтрел");
|
||||
куча.body.checkCollision.down = false;
|
||||
куча.setVisible(false);
|
||||
|
||||
мир.пфЛук = мир.пфСтрел.create(1280, 200, "основа").setOrigin(0, 0);
|
||||
мир.пфЛук.body.checkCollision.down = false;
|
||||
мир.пфЛук.setVisible(false);
|
||||
|
||||
var пуск = мир.пфСтрел.create(1270, 160, "основа").setOrigin(0, 0);
|
||||
пуск.setVisible(false);
|
||||
|
||||
мир.пфОкно = мир.пфСтрел.create(1830, 200, "основа").setOrigin(0, 0);
|
||||
мир.пфОкно.setScale(1, 20).refreshBody();
|
||||
мир.пфОкно.setVisible(false);
|
||||
var лук = мир.узелСцены("лук");
|
||||
лук.body.checkCollision.down = false;
|
||||
var пуск = мир.узелСцены("пускСтрелы");
|
||||
|
||||
// Определение прыжка по стрелам.
|
||||
мир.сцена.physics.add.collider(мир.колобок, куча, function(a, b) {
|
||||
if (мир.колобок.body.touching.down) {
|
||||
мир.состояниеКолобка.прыжокПоСтрелам = true;
|
||||
console.debug("прыжок по стрелам");
|
||||
мир.колобок.прыжокПоСтрелам = true;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -358,7 +557,6 @@ console.debug("прыжок по стрелам");
|
||||
{
|
||||
мир.пускСтрелы = true;
|
||||
мир.уведомить("пуск стрелы");
|
||||
console.debug("пуск стрелы");
|
||||
}
|
||||
};
|
||||
стПуск.overlapOnly = true;
|
||||
@@ -381,29 +579,27 @@ console.debug("пуск стрелы");
|
||||
мир.сцена.physics.add.collider(мир.стрела, мир.платформы);
|
||||
|
||||
// Определение заряда стрелы.
|
||||
var стЛук = мир.сцена.physics.add.collider(мир.стрела, мир.пфЛук);
|
||||
стЛук.collideCallback = function заряд(a, b) {
|
||||
var лук = мир.узелСцены("лук");
|
||||
var стЛук = мир.сцена.physics.add.collider(мир.стрела, лук);
|
||||
стЛук.collideCallback = function(a, b) {
|
||||
if (мир.стрела.body.touching.down && !мир.стрелаЗаряжена)
|
||||
{
|
||||
мир.стрелаЗаряжена = true;
|
||||
мир.уведомить("стрела заряжена");
|
||||
console.debug("стрела заряжена");
|
||||
}
|
||||
};
|
||||
|
||||
// Определение столкновения с окном.
|
||||
var стОкно = мир.сцена.physics.add.collider(мир.стрела, мир.пфОкно);
|
||||
var граница = мир.узелСцены("границаПолётаСтрелы");
|
||||
var стОкно = мир.сцена.physics.add.collider(мир.стрела, граница);
|
||||
стОкно.collideCallback = function(a, b) {
|
||||
if (мир.стрелаЗаряжена && мир.пускСтрелы)
|
||||
{
|
||||
мир.стрелаЗаряжена = false;
|
||||
мир.пускСтрелы = false;
|
||||
мир.уведомить("удар стрелы об окно");
|
||||
console.debug("удар стрелы об окно");
|
||||
}
|
||||
};
|
||||
|
||||
console.debug("стрела.x", мир.стрела.x);
|
||||
};
|
||||
|
||||
|
||||
@@ -412,7 +608,7 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
|
||||
ОтследитьПрыжокПоСтрелам = мир =>
|
||||
{
|
||||
мир.состояниеКолобка.прыжокПоСтрелам = null;
|
||||
мир.колобок.прыжокПоСтрелам = null;
|
||||
};
|
||||
|
||||
|
||||
@@ -421,7 +617,7 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
|
||||
ПроверитьНаличиеПрыжкаПоСтрелам = мир =>
|
||||
{
|
||||
if (!мир.состояниеКолобка.прыжокПоСтрелам)
|
||||
if (!мир.колобок.прыжокПоСтрелам)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -438,7 +634,7 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
{
|
||||
return;
|
||||
}
|
||||
var скорость = мир.состояниеКолобка.скоростьПадения * 0.9;
|
||||
var скорость = мир.колобок.скоростьПадения * 0.9;
|
||||
мир.стрела.setVelocityY(-скорость);
|
||||
};
|
||||
|
||||
@@ -466,7 +662,16 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
|
||||
ПуститьСтрелу = мир =>
|
||||
{
|
||||
мир.стрела.setVelocityX(1200);
|
||||
function randInt(min, max)
|
||||
{
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random#getting_a_random_integer_between_two_values
|
||||
min = Math.ceil(min);
|
||||
max = Math.floor(max);
|
||||
return Math.floor(Math.random() * (max - min)) + min;
|
||||
}
|
||||
var скорость = randInt(1100, 1300);
|
||||
|
||||
мир.стрела.setVelocityX(скорость);
|
||||
};
|
||||
|
||||
|
||||
@@ -484,7 +689,7 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
|
||||
ОтобразитьРазбитоеОкно = мир =>
|
||||
{
|
||||
мир.разбитоеОкно.setVisible(true);
|
||||
мир.узелСцены("разбитоеОкно").setVisible(true);
|
||||
};
|
||||
|
||||
|
||||
@@ -493,8 +698,8 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
|
||||
ОтобразитьВыломанноеОкно = мир =>
|
||||
{
|
||||
мир.разбитоеОкно.setVisible(false);
|
||||
мир.выломанноеОкно.setVisible(true);
|
||||
мир.узелСцены("разбитоеОкно").setVisible(false);
|
||||
мир.узелСцены("выломанноеОкно").setVisible(true);
|
||||
};
|
||||
|
||||
|
||||
@@ -539,6 +744,111 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ПроверитьПрыжокПоМолоку = мир =>
|
||||
{
|
||||
if (мир.колобок.вещь == "молоко")
|
||||
{
|
||||
мир.уведомить("колобок прыгнул по молоку");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ПроверитьДостаточностьПрыжкаПоМолоку = мир =>
|
||||
{
|
||||
if (мир.колобок.скоростьПадения >= 500) {
|
||||
мир.уведомить("достаточный прыжок по молоку");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
НачатьПереворотМолока = мир =>
|
||||
{
|
||||
мир.молоко = мир.узелСцены("молоко");
|
||||
мир.вещи.remove(мир.молоко);
|
||||
мир.вещиНедвижимые.add(мир.молоко);
|
||||
мир.молоко.setAngularVelocity(120);
|
||||
мир.молоко.setVelocityY(-500);
|
||||
мир.молоко.переворот = 1;
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
АнимироватьПереворотМолока = мир =>
|
||||
{
|
||||
if (!мир.молоко)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (мир.молоко.переворот == 1)
|
||||
{
|
||||
мир.молоко.переворот = 2;
|
||||
setTimeout(
|
||||
function() {
|
||||
мир.молоко.переворот = 3;
|
||||
// Меняем местами высоту и ширину тела.
|
||||
var тело = мир.молоко.body;
|
||||
var ширина = тело.height / мир.молоко.scaleY;
|
||||
var высота = тело.width / мир.молоко.scaleX;
|
||||
тело.setSize(ширина, высота);
|
||||
},
|
||||
100
|
||||
);
|
||||
}
|
||||
else if (
|
||||
(мир.молоко.переворот == 3) &&
|
||||
(мир.молоко.body.touching.down)
|
||||
) {
|
||||
мир.молоко.depth = 5;
|
||||
мир.молоко.body.stop();
|
||||
мир.молоко = null;
|
||||
мир.уведомить("перевернули молоко");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ПоказатьЛужуМолока = мир =>
|
||||
{
|
||||
|
||||
var молоко = мир.узелСцены("молоко");
|
||||
var лужа = мир.узелСцены("лужа");
|
||||
лужа.setPosition(молоко.x + 40, молоко.y + 20);
|
||||
лужа.setVisible(true);
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ВоспроизвестиЗвукПрыжкаПоМолоку = мир =>
|
||||
{
|
||||
мир.сцена.sound.play("молоко-прыгнули");
|
||||
};
|
||||
|
||||
|
||||
// // // //
|
||||
|
||||
|
||||
ВоспроизвестиЗвукПереворотаМолока = мир =>
|
||||
{
|
||||
мир.сцена.sound.play("молоко-перевернули", { seek: 1 });
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Последовательность
|
||||
@@ -550,18 +860,14 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
загрузить ресурсы сцены
|
||||
загрузить ресурсы избы
|
||||
создать сцену
|
||||
задать структуру избы
|
||||
задать функцию поиска узла по имени
|
||||
создать избу
|
||||
создать полы и стены каркаса
|
||||
создать платформы
|
||||
позволить платформам пропускать прыжки
|
||||
создать вещи
|
||||
создать пауков
|
||||
создать мышей
|
||||
создать стрелы
|
||||
настроить пауков
|
||||
настроить мышей
|
||||
настроить стрелы
|
||||
создать стрелу
|
||||
обновить сцену
|
||||
анимировать пауков
|
||||
анимировать мышей
|
||||
колобок начал прыжок
|
||||
отследить прыжок по стрелам
|
||||
колобок закончил прыжок
|
||||
@@ -584,5 +890,20 @@ console.debug("стрела.x", мир.стрела.x);
|
||||
воспроизвести звук выломанного окна
|
||||
сразу после удара
|
||||
создать стрелу
|
||||
колобок прыгнул на вещь
|
||||
проверить прыжок по молоку
|
||||
колобок прыгнул по молоку
|
||||
проверить достаточность прыжка по молоку
|
||||
воспроизвести звук прыжка по молоку
|
||||
достаточный прыжок по молоку
|
||||
начать переворот молока
|
||||
перевернули молоко
|
||||
показать лужу молока
|
||||
воспроизвести звук переворота молока
|
||||
|
||||
обновить сцену
|
||||
анимировать пауков
|
||||
анимировать мышей
|
||||
анимировать переворот молока
|
||||
`);
|
||||
|
||||
|
||||
43
К/игра/200.отладка.js
Normal file
43
К/игра/200.отладка.js
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
*
|
||||
* Реакции
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
УведомитьЛишьПервыйРаз = мир =>
|
||||
{
|
||||
if (мир.уведомилиЛишьПервыйРаз)
|
||||
{
|
||||
return;
|
||||
}
|
||||
мир.уведомилиЛишьПервыйРаз = true;
|
||||
мир.уведомить("лишь первый раз");
|
||||
};
|
||||
|
||||
|
||||
ВывестиУзлыСцены = мир =>
|
||||
{
|
||||
var узлы = мир.сцена.children.list;
|
||||
for (var номер in узлы)
|
||||
{
|
||||
var узел = узлы[номер];
|
||||
console.debug(номер + ": " + JSON.stringify(узел.toJSON()));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* Последовательность
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
мир.разобрать(`
|
||||
#обновить сцену
|
||||
# уведомить лишь первый раз
|
||||
#лишь первый раз
|
||||
# вывести узлы сцены
|
||||
`);
|
||||
|
||||
BIN
К/ресурсы/вещи/лужа.png
Normal file
BIN
К/ресурсы/вещи/лужа.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
Binary file not shown.
BIN
К/ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav
Normal file
BIN
К/ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav
Normal file
Binary file not shown.
@@ -6,3 +6,5 @@
|
||||
* https://freesound.org/people/Czarcazas/sounds/330800/
|
||||
* https://freesound.org/people/Kneeling/sounds/448004/
|
||||
* https://freesound.org/people/EminYILDIRIM/sounds/543927/
|
||||
* https://freesound.org/people/tcrocker68/sounds/235596/
|
||||
* https://freesound.org/people/cabled_mess/sounds/352065/
|
||||
|
||||
Reference in New Issue
Block a user