2
0
Files
ogs-site/К/игра/110.колобок.js
2021-05-30 13:45:40 +03:00

393 Zeilen
11 KiB
JavaScript
Originalformat Blame Verlauf

Diese Datei enthält mehrdeutige Unicode-Zeichen

Diese Datei enthält Unicode-Zeichen, die mit anderen Zeichen verwechselt werden können. Wenn du glaubst, dass das absichtlich so ist, kannst du diese Warnung ignorieren. Benutze den „Escape“-Button, um versteckte Zeichen anzuzeigen.

/*
*
* Реакции
*
*/
ЗагрузитьРесурсыКолобка= мир =>
{
мир.сцена.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,
})
};
// // // //
НастроитьСтолкновениеКолобка = мир =>
{
var столкновениеКаркас = мир.сцена.physics.add.collider(мир.колобок, мир.каркас);
столкновениеКаркас.collideCallback = function(a, каркас) {
if (мир.колобок.body.touching.down && каркас.body.touching.up && мир.колобок.прыжок)
{
мир.колобок.каркас = каркас.name;
мир.уведомить("колобок прыгнул на каркас");
}
};
мир.столкновениеПлатформы = мир.сцена.physics.add.collider(мир.колобок, мир.платформы);
мир.столкновениеВещи = мир.сцена.physics.add.collider(мир.колобок, мир.вещи);
мир.столкновениеВещи.collideCallback = function(a, вещь) {
var кк = мир.колобок.body.touching;
var кв = вещь.body.touching;
if (!мир.передвигаемыеВещи)
{
мир.передвигаемыеВещи = { };
}
мир.передвигаемыеВещи[вещь.name] = new Date();
if (кк.down && кв.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
) &&
(скоростьПадения == 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 конец = 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("окончание прыжка. скорость:", мир.колобок.скоростьПадения);
};
// // // //
ОстановитьСкользящиеВещи = мир =>
{
if (!мир.передвигаемыеВещи)
{
return;
}
var сейчас = new Date();
for (var имя in мир.передвигаемыеВещи)
{
var было = мир.передвигаемыеВещи[имя];
var узел = мир.узелСцены(имя);
if (узел && (сейчас - было > 20))
{
узел.body.stop();
delete мир.передвигаемыеВещи[имя];
}
}
if (!Object.keys(мир.передвигаемыеВещи).length)
{
мир.передвигаемыеВещи = null;
}
};
/*
*
* Последовательность
*
*/
мир.разобрать(`
загрузить ресурсы сцены
загрузить ресурсы колобка
создать сцену
создать колобка
создать анимации колобка
настроить столкновение колобка
столкновение с врагом
начать мигание колобка
обновить сцену
переместить колобка
анимировать колобка
определить окончание прыжка колобка
мигать колобка
остановить скользящие вещи
колобок начал прыжок
воспроизвести звук прыжка
вывести начало прыжка в консоль
колобок закончил прыжок
вывести окончание прыжка в консоль
начали мигать колобка
отключить столкновение с платформами и вещами
уменьшить прыгучесть колобка
закончили мигать колобка
включить столкновение с платформами и вещами
восстановить прыгучесть колобка
`);