361 lines
10 KiB
JavaScript
361 lines
10 KiB
JavaScript
/*
|
||
*
|
||
* Реакции
|
||
*
|
||
*/
|
||
|
||
|
||
ЗагрузитьРесурсыКолобка= мир =>
|
||
{
|
||
мир.сцена.load.spritesheet(
|
||
"колобок",
|
||
"ресурсы/колобок/колобок.png",
|
||
{
|
||
frameWidth: 97,
|
||
frameHeight: 94,
|
||
}
|
||
);
|
||
мир.сцена.load.audio("прыжок", "ресурсы/звуки/331381__qubodup__public-domain-jump-sound.wav");
|
||
мир.сцена.load.audio("повреждение", "ресурсы/звуки/437650__dersuperanton__getting-hit-damage-scream.wav");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьКолобка = мир =>
|
||
{
|
||
var x = 100;
|
||
var y = 500;
|
||
//var x = 1500;
|
||
//var y = 200;
|
||
мир.колобок = мир.сцена.physics.add.sprite(x, y, "колобок");
|
||
мир.колобок.depth = 10;
|
||
мир.колобок.body.setSize(50);
|
||
// Портит анимацию прыжков!
|
||
// мир.колобок.setBounceY(0.1);
|
||
|
||
// Следить за колобком камерой.
|
||
const камера = мир.сцена.cameras.main;
|
||
камера.startFollow(мир.колобок, false, 0.1, 0.1);
|
||
|
||
// Состояние.
|
||
мир.колобок["мигать"] = false;
|
||
мир.колобок["мигание"] = { };
|
||
мир.колобок["прыгучесть"] = -570;
|
||
мир.колобок["коэффициентПрыгучести"] = 1;
|
||
мир.колобок["прыжок"] = false;
|
||
мир.колобок["скоростьПадения"] = 0;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
СоздатьАнимацииКолобка = мир =>
|
||
{
|
||
var анимации = мир.сцена.anims;
|
||
анимации.create({
|
||
key: "колобок-неподвижен",
|
||
frames: [{ key: "колобок", frame: 0 }],
|
||
frameRate: 20,
|
||
})
|
||
анимации.create({
|
||
key: "колобок-движение",
|
||
frames: мир.сцена.anims.generateFrameNumbers("колобок", { start: 23, end: 1 }),
|
||
frameRate: 20,
|
||
repeat: -1,
|
||
})
|
||
анимации.create({
|
||
key: "колобок-прыжок",
|
||
frames: [{ key: "колобок", frame: 24 }],
|
||
frameRate: 20,
|
||
})
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НастроитьСтолкновениеКолобка = мир =>
|
||
{
|
||
мир.сцена.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) {
|
||
мир.уведомить("столкновение с врагом");
|
||
};
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ПереместитьКолобка = мир =>
|
||
{
|
||
if (!мир.управление)
|
||
{
|
||
мир.колобок.setVelocityX(0);
|
||
return;
|
||
}
|
||
|
||
var x = 0;
|
||
if (мир.управление.направление == -1)
|
||
{
|
||
x = -200;
|
||
мир.колобок.flipX = true;
|
||
}
|
||
else if (мир.управление.направление == 1)
|
||
{
|
||
x = 200;
|
||
мир.колобок.flipX = false;
|
||
}
|
||
мир.колобок.setVelocityX(x);
|
||
|
||
if (мир.управление.прыжок && !мир.колобок.прыжок)
|
||
{
|
||
мир.колобок.прыжок = true;
|
||
var скорость = мир.колобок.прыгучесть * мир.колобок.коэффициентПрыгучести;
|
||
мир.колобок.setVelocityY(скорость);
|
||
мир.уведомить("колобок начал прыжок");
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВоспроизвестиЗвукПрыжка = мир =>
|
||
{
|
||
мир.сцена.sound.play("прыжок");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОпределитьОкончаниеПрыжкаКолобка = мир =>
|
||
{
|
||
if (!мир.колобок.прыжок)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var скоростьПадения = мир.колобок.body.velocity.y;
|
||
if (
|
||
(мир.колобок.скоростьПадения > 40) &&
|
||
(скоростьПадения == 0) &&
|
||
мир.колобок.body.touching.down
|
||
) {
|
||
мир.уведомить("колобок закончит прыжок");
|
||
мир.колобок.прыжок = false;
|
||
мир.уведомить("колобок закончил прыжок");
|
||
}
|
||
мир.колобок.скоростьПадения = скоростьПадения;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
АнимироватьКолобка = мир =>
|
||
{
|
||
var есть = "";
|
||
if (мир.колобок.anims.currentAnim)
|
||
{
|
||
есть = мир.колобок.anims.currentAnim.key;
|
||
}
|
||
|
||
var надо = "колобок-неподвижен";
|
||
if (мир.колобок.прыжок)
|
||
{
|
||
надо = "колобок-прыжок";
|
||
}
|
||
else if (мир.колобок.body.velocity.x != 0)
|
||
{
|
||
надо = "колобок-движение";
|
||
}
|
||
|
||
if (есть != надо)
|
||
{
|
||
мир.колобок.anims.play(надо);
|
||
мир.уведомить("изменили анимацию колобка");
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОтключитьСтолкновениеСПлатформамиИВещами = мир =>
|
||
{
|
||
мир.столкновениеПлатформы.active = false;
|
||
мир.столкновениеВещи.active = false;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВключитьСтолкновениеСПлатформамиИВещами = мир =>
|
||
{
|
||
мир.столкновениеПлатформы.active = true;
|
||
мир.столкновениеВещи.active = true;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ОстановитьПередвижениеВещей = мир =>
|
||
{
|
||
var вещи = мир.вещи.getChildren();
|
||
for (var н in вещи)
|
||
{
|
||
var вещь = вещи[н];
|
||
if (вещь.body.touching.down)
|
||
{
|
||
вещь.body.stop();
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
НачатьМиганиеКолобка = мир =>
|
||
{
|
||
var конец = new Date();
|
||
конец.setSeconds(конец.getSeconds() + 6);
|
||
мир.колобок.мигание.окончание = конец;
|
||
|
||
var звук = мир.сцена.sound.get("повреждение");
|
||
if (!звук || !звук.isPlaying)
|
||
{
|
||
мир.сцена.sound.play("повреждение");
|
||
}
|
||
|
||
if (мир.колобок.мигать)
|
||
{
|
||
return;
|
||
}
|
||
|
||
мир.колобок.мигать = true;
|
||
мир.колобок.мигание = {
|
||
шаг: 0.1,
|
||
цель: 0,
|
||
};
|
||
|
||
мир.уведомить("начали мигать колобка");
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
МигатьКолобка = мир =>
|
||
{
|
||
if (!мир.колобок.мигать)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var м = мир.колобок.мигание;
|
||
var сейчас = new Date();
|
||
|
||
if (м.окончание - сейчас < 0)
|
||
{
|
||
мир.колобок.мигать = false;
|
||
мир.колобок.alpha = 1;
|
||
мир.уведомить("закончили мигать колобка");
|
||
return;
|
||
}
|
||
|
||
var к = (м.цель == 1) ? 1 : -1;
|
||
мир.колобок.alpha += к * м.шаг;
|
||
if ((мир.колобок.alpha <= 0) || (мир.колобок.alpha >= 1))
|
||
{
|
||
м.цель = к * -1;
|
||
}
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
УменьшитьПрыгучестьКолобка = мир =>
|
||
{
|
||
мир.колобок.коэффициентПрыгучести = 0.6;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВосстановитьПрыгучестьКолобка = мир =>
|
||
{
|
||
мир.колобок.коэффициентПрыгучести = 1;
|
||
};
|
||
|
||
|
||
// // // //
|
||
|
||
|
||
ВывестиНачалоПрыжкаВКонсоль = мир =>
|
||
{
|
||
console.debug("начало прыжка");
|
||
};
|
||
ВывестиОкончаниеПрыжкаВКонсоль = мир =>
|
||
{
|
||
console.debug("окончание прыжка. скорость:", мир.колобок.скоростьПадения);
|
||
};
|
||
|
||
|
||
/*
|
||
*
|
||
* Последовательность
|
||
*
|
||
*/
|
||
|
||
|
||
мир.разобрать(`
|
||
загрузить ресурсы сцены
|
||
загрузить ресурсы колобка
|
||
создать сцену
|
||
создать колобка
|
||
создать анимации колобка
|
||
настроить столкновение колобка
|
||
столкновение с врагом
|
||
начать мигание колобка
|
||
обновить сцену
|
||
переместить колобка
|
||
анимировать колобка
|
||
определить окончание прыжка колобка
|
||
мигать колобка
|
||
остановить передвижение вещей
|
||
колобок начал прыжок
|
||
воспроизвести звук прыжка
|
||
вывести начало прыжка в консоль
|
||
колобок закончил прыжок
|
||
вывести окончание прыжка в консоль
|
||
начали мигать колобка
|
||
# отключить столкновение с платформами и вещами
|
||
# уменьшить прыгучесть колобка
|
||
закончили мигать колобка
|
||
включить столкновение с платформами и вещами
|
||
восстановить прыгучесть колобка
|
||
`);
|
||
|