Browse Source

K 0.8.0

master
parent
commit
326ffc403e
10 changed files with 675 additions and 240 deletions
  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. BIN
      К/ресурсы/вещи/лужа.png
  8. BIN
      К/ресурсы/звуки/235596__tcrocker68__large-glassbottle-fall-woodfloor.wav
  9. BIN
      К/ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav
  10. +2
    -0
      К/ресурсы/звуки/README.md

+ 3
- 1
К/index.html View File

@@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <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> <script src="https://cdn.jsdelivr.net/npm/phaser@3.54.0/dist/phaser.min.js"></script>
<style> <style>
html, body { html, body {
@@ -27,10 +27,12 @@
<div id="родитель"></div> <div id="родитель"></div>
<script src="игра/001.мир.js"></script> <script src="игра/001.мир.js"></script>
<script src="игра/011.phaser.js"></script> <script src="игра/011.phaser.js"></script>
<script src="игра/100.структура.js"></script>
<script src="игра/108.группы.js"></script> <script src="игра/108.группы.js"></script>
<script src="игра/109.управление.js"></script> <script src="игра/109.управление.js"></script>
<script src="игра/110.колобок.js"></script> <script src="игра/110.колобок.js"></script>
<script src="игра/111.изба.js"></script> <script src="игра/111.изба.js"></script>
<script src="игра/200.отладка.js"></script>
<script src="игра/499.пуск.js"></script> <script src="игра/499.пуск.js"></script>
</body> </body>
</html> </html>

+ 55
- 0
К/игра/100.структура.js View 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();
}
}
}

+ 4
- 0
К/игра/108.группы.js View File

@@ -13,7 +13,9 @@
мир.каркас = мир.сцена.physics.add.staticGroup(); мир.каркас = мир.сцена.physics.add.staticGroup();
мир.платформы = мир.сцена.physics.add.staticGroup(); мир.платформы = мир.сцена.physics.add.staticGroup();
мир.вещи = мир.сцена.add.group(); мир.вещи = мир.сцена.add.group();
мир.вещиНедвижимые = мир.сцена.add.group();
мир.враги = мир.сцена.physics.add.group({ allowGravity: false }); мир.враги = мир.сцена.physics.add.group({ allowGravity: false });
мир.стрелы = мир.сцена.physics.add.staticGroup();
}; };




@@ -24,6 +26,8 @@
{ {
мир.сцена.physics.add.collider(мир.вещи, мир.каркас); мир.сцена.physics.add.collider(мир.вещи, мир.каркас);
мир.сцена.physics.add.collider(мир.вещи, мир.платформы); мир.сцена.physics.add.collider(мир.вещи, мир.платформы);
мир.сцена.physics.add.collider(мир.вещиНедвижимые, мир.каркас);
мир.сцена.physics.add.collider(мир.вещиНедвижимые, мир.платформы);
}; };






+ 35
- 27
К/игра/110.колобок.js View File

@@ -39,14 +39,13 @@
const камера = мир.сцена.cameras.main; const камера = мир.сцена.cameras.main;
камера.startFollow(мир.колобок, false, 0.1, 0.1); камера.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(мир.колобок, мир.платформы); мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);


мир.столкновениеВещи = мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
мир.столкновениеВещи.collideCallback = function(a, вещь) {
if (мир.колобок.body.touching.down && вещь.body.touching.up && мир.колобок.прыжок)
{
мир.колобок.вещь = вещь.name;
мир.уведомить("колобок прыгнул на вещь");
}
};

var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги); var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
столкновениеВраги.overlapOnly = true; столкновениеВраги.overlapOnly = true;
столкновениеВраги.collideCallback = function(a, b) { столкновениеВраги.collideCallback = function(a, b) {
@@ -116,10 +123,10 @@
} }
мир.колобок.setVelocityX(x); мир.колобок.setVelocityX(x);


if (мир.управление.прыжок && !мир.состояниеКолобка.прыжок)
if (мир.управление.прыжок && !мир.колобок.прыжок)
{ {
мир.состояниеКолобка.прыжок = true;
var скорость = мир.состояниеКолобка.прыгучесть * мир.состояниеКолобка.коэффициентПрыгучести;
мир.колобок.прыжок = true;
var скорость = мир.колобок.прыгучесть * мир.колобок.коэффициентПрыгучести;
мир.колобок.setVelocityY(скорость); мир.колобок.setVelocityY(скорость);
мир.уведомить("колобок начал прыжок"); мир.уведомить("колобок начал прыжок");
} }
@@ -140,21 +147,22 @@


ОпределитьОкончаниеПрыжкаКолобка = мир => ОпределитьОкончаниеПрыжкаКолобка = мир =>
{ {
if (!мир.состояниеКолобка.прыжок)
if (!мир.колобок.прыжок)
{ {
return; return;
} }


var скоростьПадения = мир.колобок.body.velocity.y; var скоростьПадения = мир.колобок.body.velocity.y;
if ( if (
(мир.состояниеКолобка.скоростьПадения > 40) &&
(мир.колобок.скоростьПадения > 40) &&
(скоростьПадения == 0) && (скоростьПадения == 0) &&
мир.колобок.body.touching.down мир.колобок.body.touching.down
) { ) {
мир.состояниеКолобка.прыжок = false;
мир.уведомить("колобок закончит прыжок");
мир.колобок.прыжок = false;
мир.уведомить("колобок закончил прыжок"); мир.уведомить("колобок закончил прыжок");
} }
мир.состояниеКолобка.скоростьПадения = скоростьПадения;
мир.колобок.скоростьПадения = скоростьПадения;
}; };




@@ -170,7 +178,7 @@
} }


var надо = "колобок-неподвижен"; var надо = "колобок-неподвижен";
if (мир.состояниеКолобка.прыжок)
if (мир.колобок.прыжок)
{ {
надо = "колобок-прыжок"; надо = "колобок-прыжок";
} }
@@ -231,7 +239,7 @@
{ {
var конец = new Date(); var конец = new Date();
конец.setSeconds(конец.getSeconds() + 6); конец.setSeconds(конец.getSeconds() + 6);
мир.состояниеКолобка.мигание.окончание = конец;
мир.колобок.мигание.окончание = конец;


var звук = мир.сцена.sound.get("повреждение"); var звук = мир.сцена.sound.get("повреждение");
if (!звук || !звук.isPlaying) if (!звук || !звук.isPlaying)
@@ -239,13 +247,13 @@
мир.сцена.sound.play("повреждение"); мир.сцена.sound.play("повреждение");
} }


if (мир.состояниеКолобка.мигать)
if (мир.колобок.мигать)
{ {
return; return;
} }


мир.состояниеКолобка.мигать = true;
мир.состояниеКолобка.мигание = {
мир.колобок.мигать = true;
мир.колобок.мигание = {
шаг: 0.1, шаг: 0.1,
цель: 0, цель: 0,
}; };
@@ -259,17 +267,17 @@


МигатьКолобка = мир => МигатьКолобка = мир =>
{ {
if (!мир.состояниеКолобка.мигать)
if (!мир.колобок.мигать)
{ {
return; return;
} }


var м = мир.состояниеКолобка.мигание;
var м = мир.колобок.мигание;
var сейчас = new Date(); var сейчас = new Date();


if (м.окончание - сейчас < 0) if (м.окончание - сейчас < 0)
{ {
мир.состояниеКолобка.мигать = false;
мир.колобок.мигать = false;
мир.колобок.alpha = 1; мир.колобок.alpha = 1;
мир.уведомить("закончили мигать колобка"); мир.уведомить("закончили мигать колобка");
return; 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 View File

@@ -12,11 +12,14 @@
мир.сцена.load.audio("пуск-стрелы", "ресурсы/звуки/521552__omerbhatti34__arrow-impact.mp3"); мир.сцена.load.audio("пуск-стрелы", "ресурсы/звуки/521552__omerbhatti34__arrow-impact.mp3");
мир.сцена.load.audio("удар-стрелы", "ресурсы/звуки/330800__czarcazas__shattering-glass-small.mp3"); мир.сцена.load.audio("удар-стрелы", "ресурсы/звуки/330800__czarcazas__shattering-glass-small.mp3");
мир.сцена.load.audio("выломали-окно", "ресурсы/звуки/448004__kneeling__break-window.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("основа", "ресурсы/отладка/основа.jpg");
мир.сцена.load.image("линия", "ресурсы/отладка/линия_вертикальная.png"); мир.сцена.load.image("линия", "ресурсы/отладка/линия_вертикальная.png");
мир.сцена.load.image("изба", "ресурсы/сцены/изба.jpg"); мир.сцена.load.image("изба", "ресурсы/сцены/изба.jpg");
мир.сцена.load.image("молоко", "ресурсы/вещи/банка_молока.png"); мир.сцена.load.image("молоко", "ресурсы/вещи/банка_молока.png");
мир.сцена.load.image("лужа", "ресурсы/вещи/лужа.png");
мир.сцена.load.image("паук", "ресурсы/животные/паук.png"); мир.сцена.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, x: 0,
y: 585, y: 585,
ширина: 43,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 43,
visible: false,
}, },
{
полКрышки: {
родитель: мир.каркас,
тип: "платформа",
x: 300, x: 300,
y: 585, y: 585,
ширина: 30,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 30,
visible: false,
}, },
{
полПослеКрышки: {
родитель: мир.каркас,
тип: "платформа",
x: 510, x: 510,
y: 585, 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, x: 0,
y: 385,
высота: 50,
y: 200,
texture: "основа",
originX: 0,
originY: 0,
scaleY: 50,
visible: false,
}, },
{
праваяСтена: {
родитель: мир.каркас,
тип: "платформа",
x: 2000, 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, x: 583,
y: 473, y: 473,
ширина: 65,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 65,
visible: false,
}, },
// Полка 1.
{
полка1: {
родитель: мир.платформы,
тип: "платформа",
x: 666, x: 666,
y: 335, y: 335,
ширина: 3,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 3,
visible: false,
}, },
// Полка молока.
{
полкаМолока: {
родитель: мир.платформы,
тип: "платформа",
x: 771, x: 771,
y: 335, y: 335,
ширина: 3,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 3,
visible: false,
}, },
// Полка 3.
{
полка3: {
родитель: мир.платформы,
тип: "платформа",
x: 862, x: 862,
y: 335, y: 335,
ширина: 3,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 3,
visible: false,
}, },
// Полка самовара.
{
полкаСамовара: {
родитель: мир.платформы,
тип: "платформа",
x: 995, x: 995,
y: 355, y: 355,
ширина: 4,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 4,
visible: false,
}, },
{
лежанкаПечи: {
родитель: мир.платформы,
тип: "платформа",
x: 620, x: 620,
y: 245, y: 245,
ширина: 35,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 35,
visible: false,
}, },
{
основаТрубыПечи: {
родитель: мир.платформы,
тип: "платформа",
x: 950, x: 950,
y: 180, y: 180,
ширина: 12,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 12,
visible: false,
}, },
// Стол.
{

стол: {
родитель: мир.платформы,
тип: "платформа",
x: 1270, x: 1270,
y: 427, y: 427,
ширина: 70,
texture: "основа",
originX: 0,
originY: 0,
scaleX: 70,
visible: false,
}, },
// Окно.
{
подоконник: {
родитель: мир.платформы,
тип: "платформа",
x: 1690, x: 1690,
y: 375, 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, x: 620,
y: 345, y: 345,
texture: "паук",
скорость: 50, скорость: 50,
низ: 550, низ: 550,
верх: 270, верх: 270,
depth: 10,
}, },
{
нить1: {
родитель: мир.сцена,
тип: "изображение",
x: 619,
y: 245,
texture: "линия",
originX: 0,
originY: 0,
depth: 10,
},
паук2: {
родитель: мир.враги,
тип: "платформа",
x: 785, x: 785,
y: 375, y: 375,
скорость: 80,
низ: 400,
texture: "паук",
скорость: 70,
низ: 600,
верх: 270, верх: 270,
depth: 10,
}, },
{
нить2: {
родитель: мир.сцена,
тип: "изображение",
x: 784,
y: 245,
texture: "линия",
originX: 0,
originY: 0,
depth: 10,
},
паук3: {
родитель: мир.враги,
тип: "платформа",
x: 930, x: 930,
y: 500, y: 500,
texture: "паук",
скорость: 70, скорость: 70,
низ: 550, низ: 550,
верх: 270, верх: 270,
depth: 10,
}, },
{
нить3: {
родитель: мир.сцена,
тип: "изображение",
x: 929,
y: 245,
texture: "линия",
originX: 0,
originY: 0,
depth: 10,
},
паук4: {
родитель: мир.враги,
тип: "платформа",
x: 1003, x: 1003,
y: 250, y: 250,
texture: "паук",
скорость: 40, скорость: 40,
низ: 400, низ: 400,
верх: 200, верх: 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 нить = мир.нитиПауков[номер]; var нить = мир.нитиПауков[номер];
var настройки = мир.настройкиПауков[номер];
нить.displayHeight = паук.y - нить.y - 5; нить.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 мир.мыши) for (var номер in мир.мыши)
{ {
var мышь= мир.мыши[номер]; var мышь= мир.мыши[номер];
var скорость = мир.настройкиМышей[номер].скорость;
if (мышь.x > 1950) if (мышь.x > 1950)
{ {
мышь.setVelocityX(-скорость);
мышь.setVelocityX(-мышь.скорость);
мышь.flipX = false; мышь.flipX = false;
} else if (мышь.x < 50) } else if (мышь.x < 50)
{ {
мышь.setVelocityX(скорость);
мышь.setVelocityX(мышь.скорость);
мышь.flipX = true; мышь.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; куча.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) { мир.сцена.physics.add.collider(мир.колобок, куча, function(a, b) {
if (мир.колобок.body.touching.down) { if (мир.колобок.body.touching.down) {
мир.состояниеКолобка.прыжокПоСтрелам = true;
console.debug("прыжок по стрелам");
мир.колобок.прыжокПоСтрелам = true;
} }
}); });


@@ -358,7 +557,6 @@ console.debug("прыжок по стрелам");
{ {
мир.пускСтрелы = true; мир.пускСтрелы = true;
мир.уведомить("пуск стрелы"); мир.уведомить("пуск стрелы");
console.debug("пуск стрелы");
} }
}; };
стПуск.overlapOnly = true; стПуск.overlapOnly = true;
@@ -381,29 +579,27 @@ console.debug("пуск стрелы");
мир.сцена.physics.add.collider(мир.стрела, мир.платформы); мир.сцена.physics.add.collider(мир.стрела, мир.платформы);


// Определение заряда стрелы. // Определение заряда стрелы.
var стЛук = мир.сцена.physics.add.collider(мир.стрела, мир.пфЛук);
стЛук.collideCallback = function заряд(a, b) {
var лук = мир.узелСцены("лук");
var стЛук = мир.сцена.physics.add.collider(мир.стрела, лук);
стЛук.collideCallback = function(a, b) {
if (мир.стрела.body.touching.down && !мир.стрелаЗаряжена) if (мир.стрела.body.touching.down && !мир.стрелаЗаряжена)
{ {
мир.стрелаЗаряжена = true; мир.стрелаЗаряжена = true;
мир.уведомить("стрела заряжена"); мир.уведомить("стрела заряжена");
console.debug("стрела заряжена");
} }
}; };


// Определение столкновения с окном. // Определение столкновения с окном.
var стОкно = мир.сцена.physics.add.collider(мир.стрела, мир.пфОкно);
var граница = мир.узелСцены("границаПолётаСтрелы");
var стОкно = мир.сцена.physics.add.collider(мир.стрела, граница);
стОкно.collideCallback = function(a, b) { стОкно.collideCallback = function(a, b) {
if (мир.стрелаЗаряжена && мир.пускСтрелы) if (мир.стрелаЗаряжена && мир.пускСтрелы)
{ {
мир.стрелаЗаряжена = false; мир.стрелаЗаряжена = false;
мир.пускСтрелы = 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; return;
} }
@@ -438,7 +634,7 @@ console.debug("стрела.x", мир.стрела.x);
{ {
return; return;
} }
var скорость = мир.состояниеКолобка.скоростьПадения * 0.9;
var скорость = мир.колобок.скоростьПадения * 0.9;
мир.стрела.setVelocityY(-скорость); мир.стрела.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 View File

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


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


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


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


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


BIN
К/ресурсы/вещи/лужа.png View File

Before After
Width: 401  |  Height: 168  |  Size: 85KB

BIN
К/ресурсы/звуки/235596__tcrocker68__large-glassbottle-fall-woodfloor.wav View File


BIN
К/ресурсы/звуки/352065__cabled-mess__glassy-bits-06.wav View File


+ 2
- 0
К/ресурсы/звуки/README.md View File

@@ -6,3 +6,5 @@
* https://freesound.org/people/Czarcazas/sounds/330800/ * https://freesound.org/people/Czarcazas/sounds/330800/
* https://freesound.org/people/Kneeling/sounds/448004/ * https://freesound.org/people/Kneeling/sounds/448004/
* https://freesound.org/people/EminYILDIRIM/sounds/543927/ * https://freesound.org/people/EminYILDIRIM/sounds/543927/
* https://freesound.org/people/tcrocker68/sounds/235596/
* https://freesound.org/people/cabled_mess/sounds/352065/

Loading…
Cancel
Save