Files
K/игра/110.колобок.js

296 lines
8.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*
* Реакции
*
*/
ЗагрузитьРесурсыКолобка= мир =>
{
мир.сцена.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");
};
// // // //
СоздатьКолобка = мир =>
{
мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок");
//мир.колобок = мир.сцена.physics.add.sprite(1000, 500, "колобок");
мир.колобок.depth = 10;
мир.колобок.body.setSize(50);
// Портит анимацию прыжков!
//мир.колобок.setBounceY(0.1);
// Следить за колобком камерой.
const камера = мир.сцена.cameras.main;
камера.startFollow(мир.колобок, false, 0.1, 0.1);
мир.состояниеКолобка = {
мигать: false,
мигание: { },
прыгучесть: -570,
коэффициентПрыгучести: 1,
};
};
// // // //
СоздатьАнимацииКолобка = мир =>
{
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(мир.колобок, мир.платформы);
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 (мир.управление.прыжок && мир.колобок.body.touching.down)
{
var скорость = мир.состояниеКолобка.прыгучесть * мир.состояниеКолобка.коэффициентПрыгучести;
мир.колобок.setVelocityY(скорость);
мир.сцена.sound.play("прыжок");
}
};
// // // //
АнимироватьКолобка = мир =>
{
var есть = "";
if (мир.колобок.anims.currentAnim)
{
есть = мир.колобок.anims.currentAnim.key;
}
var надо = "колобок-неподвижен";
if (мир.управление && мир.управление.прыжок && !мир.колобок.body.touching.down)
{
надо = "колобок-прыжок";
}
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() + 8);
мир.состояниеКолобка.мигание.окончание = конец;
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;
};
/*
*
* Последовательность
*
*/
мир.разобрать(`
загрузить ресурсы сцены
загрузить ресурсы колобка
создать сцену
создать колобка
создать анимации колобка
настроить столкновение колобка
столкновение с врагом
начать мигание колобка
обновить сцену
переместить колобка
анимировать колобка
мигать колобка
остановить передвижение вещей
начали мигать колобка
отключить столкновение с платформами и вещами
уменьшить прыгучесть колобка
закончили мигать колобка
включить столкновение с платформами и вещами
восстановить прыгучесть колобка
`);