Михаил Капелько 3 лет назад
Родитель
Сommit
326ffc403e
10 измененных файлов: 675 добавлений и 240 удалений
  1. +3
    -1
      К/index.html
  2. +55
    -0
      К/игра/100.структура.js
  3. +4
    -0
      К/игра/108.группы.js
  4. +35
    -27
      К/игра/110.колобок.js
  5. +533
    -212
      К/игра/111.изба.js
  6. +43
    -0
      К/игра/200.отладка.js
  7. Двоичные данные
      К/ресурсы/вещи/лужа.png
  8. Двоичные данные
      К/ресурсы/звуки/235596__tcrocker68__large-glassbottle-fall-woodfloor.wav
  9. Двоичные данные
      К/ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav
  10. +2
    -0
      К/ресурсы/звуки/README.md

+ 3
- 1
К/index.html Просмотреть файл

@@ -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
- 0
К/игра/100.структура.js Просмотреть файл

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

+ 4
- 0
К/игра/108.группы.js Просмотреть файл

@@ -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(мир.вещиНедвижимые, мир.платформы);
};




+ 35
- 27
К/игра/110.колобок.js Просмотреть файл

@@ -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("окончание прыжка. скорость:", мир.колобок.скоростьПадения);
};




+ 533
- 212
К/игра/111.изба.js Просмотреть файл

@@ -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,219 +33,441 @@
// // // //


СоздатьИзбу = мир =>
ЗадатьСтруктуруИзбы = мир =>
{
мир.сцена.sound.play("звук-избы", { loop: true });

мир.сцена.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);
};


// // // //

мир.изба = {
фон: {
родитель: мир.сцена,
тип: "изображение",
x: 0,
y: 0,
texture: "изба",
originX: 0,
originY: 0,
},

СоздатьПолыИСтеныКаркаса = мир =>
{
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);
}
};


// // // //


СоздатьПлатформы = мир =>
{
var п = [
{
фундаментПечи: {
родитель: мир.платформы,
тип: "платформа",
x: 583,
y: 473,
ширина: 65,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 65,
visible: false,
},
// Полка 1.
{
полка1: {
родитель: мир.платформы,
тип: "платформа",
x: 666,
y: 335,
ширина: 3,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 3,
visible: false,
},
// Полка молока.
{
полкаМолока: {
родитель: мир.платформы,
тип: "платформа",
x: 771,
y: 335,
ширина: 3,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 3,
visible: false,
},
// Полка 3.
{
полка3: {
родитель: мир.платформы,
тип: "платформа",
x: 862,
y: 335,
ширина: 3,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 3,
visible: false,
},
// Полка самовара.
{
полкаСамовара: {
родитель: мир.платформы,
тип: "платформа",
x: 995,
y: 355,
ширина: 4,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 4,
visible: false,
},
{
лежанкаПечи: {
родитель: мир.платформы,
тип: "платформа",
x: 620,
y: 245,
ширина: 35,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 35,
visible: false,
},
{
основаТрубыПечи: {
родитель: мир.платформы,
тип: "платформа",
x: 950,
y: 180,
ширина: 12,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 12,
visible: false,
},
// Стол.
{

стол: {
родитель: мир.платформы,
тип: "платформа",
x: 1270,
y: 427,
ширина: 70,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 70,
visible: false,
},
// Окно.
{
подоконник: {
родитель: мир.платформы,
тип: "платформа",
x: 1690,
y: 375,
ширина: 20,
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,
},
];
for (var номер in п)
{
var часть = п[номер];
var элемент = мир.платформы.create(часть.x, часть.y, "основа").setOrigin(0, 0);
элемент.setScale(часть.ширина, 1).refreshBody();
элемент.setVisible(false);
}
};


// // // //


ПозволитьПлатформамПропускатьПрыжки = мир =>
{
мир.платформы.children.iterate(function(платформа) {
платформа.body.checkCollision.down = false;
платформа.body.checkCollision.left = false;
платформа.body.checkCollision.right = false;
});
};


// // // //


СоздатьВещи = мир =>
{
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(самовар);
};


// // // //

молоко: {
родитель: мир.сцена.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,
скорость: 80,
низ: 400,
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,
},
};
};


// // // //


ЗадатьФункциюПоискаУзлаПоИмени = мир =>
{
мир.узелСцены = function(имя) {
return мир.сцена.children.list.find(function(элемент) {
return элемент.name == имя;
});
};
};


// // // //


СоздатьИзбу = мир =>
{
создатьУзлыСценыПоСтруктуре(мир.изба);
мир.сцена.sound.play("звук-избы", { loop: true });
};


// // // //


ПозволитьПлатформамПропускатьПрыжки = мир =>
{
мир.платформы.children.iterate(function(платформа) {
платформа.body.checkCollision.down = false;
платформа.body.checkCollision.left = false;
платформа.body.checkCollision.right = false;
});
};


// // // //


НастроитьПауков = мир =>
{
мир.пауки = [];
мир.нитиПауков = [];
for (var номер in мир.настройкиПауков)
for (var имя in мир.изба)
{
var настройки = мир.настройкиПауков[номер];
var паук = мир.враги.create(настройки.x, настройки.y, "паук");
паук.body.setVelocityY(настройки.скорость);
паук.depth = 10;
мир.пауки.push(паук);
var нить = мир.сцена.add.image(настройки.x - 1, настройки.верх - 25, "линия").setOrigin(0, 0);
нить.depth = паук.depth;
мир.нитиПауков.push(нить);
if (имя.startsWith("паук"))
{
var паук = мир.узелСцены(имя);
var имяНити = имя.replace("паук", "нить");
var нить = мир.узелСцены(имяНити);
паук.body.setVelocityY(паук.скорость);
мир.пауки.push(паук);
мир.нитиПауков.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,29 +496,17 @@
// // // //


СоздатьМышей = мир =>
НастроитьМышей = мир =>
{
мир.настройкиМышей= [
{
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;
мир.мыши.push(мышь);
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
- 0
К/игра/200.отладка.js Просмотреть файл

@@ -0,0 +1,43 @@
/*
*
* Реакции
*
*/


УведомитьЛишьПервыйРаз = мир =>
{
if (мир.уведомилиЛишьПервыйРаз)
{
return;
}
мир.уведомилиЛишьПервыйРаз = true;
мир.уведомить("лишь первый раз");
};


ВывестиУзлыСцены = мир =>
{
var узлы = мир.сцена.children.list;
for (var номер in узлы)
{
var узел = узлы[номер];
console.debug(номер + ": " + JSON.stringify(узел.toJSON()));
}
};


/*
*
* Последовательность
*
*/


мир.разобрать(`
#обновить сцену
# уведомить лишь первый раз
#лишь первый раз
# вывести узлы сцены
`);


Двоичные данные
К/ресурсы/вещи/лужа.png Просмотреть файл

До После
Ширина: 401  |  Высота: 168  |  Размер: 85KB

Двоичные данные
К/ресурсы/звуки/235596__tcrocker68__large-glassbottle-fall-woodfloor.wav Просмотреть файл


Двоичные данные
К/ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav Просмотреть файл


+ 2
- 0
К/ресурсы/звуки/README.md Просмотреть файл

@@ -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/

Загрузка…
Отмена
Сохранить