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

210 lines
5.6 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,
}
);
};
// // // //
СоздатьГруппыСущностей = мир =>
{
мир.каркас = мир.сцена.physics.add.staticGroup();
мир.платформы = мир.сцена.physics.add.staticGroup();
мир.враги = мир.сцена.add.group();
};
// // // //
СоздатьКолобка = мир =>
{
мир.колобок = мир.сцена.physics.add.sprite(100, 500, "колобок");
мир.колобок.depth = 10;
мир.колобок.body.setSize(50);
// портит логику анимации.
//мир.колобок.setBounceY(0.1);
// Следить за колобком камерой.
const камера = мир.сцена.cameras.main;
камера.startFollow(мир.колобок, false, 0.1, 0.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(мир.враги, мир.каркас);
мир.сцена.physics.add.collider(мир.враги, мир.платформы);
var враг = мир.сцена.physics.add.sprite(750, 100, "основа");
враг.setScale(5, 5).refreshBody();
враг.depth = 10;
мир.враги.add(враг);
var столкновениеВраги = мир.сцена.physics.add.collider(мир.колобок, мир.враги);
столкновениеВраги.overlapOnly = true;
столкновениеВраги.collideCallback = function(a, b) {
мир.уведомить("столкновение с врагом");
console.debug("столкновение с врагом");
};
};
// // // //
ПереместитьКолобка = мир =>
{
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)
{
мир.колобок.setVelocityY(-570);
}
};
// // // //
АнимироватьКолобка = мир => {
var есть = "";
if (мир.колобок.anims.currentAnim)
{
есть = мир.колобок.anims.currentAnim.key;
}
var надо = "колобок-неподвижен";
if (!мир.колобок.body.touching.down) {
надо = "колобок-прыжок";
} else if (мир.колобок.body.velocity.x != 0) {
надо = "колобок-движение";
}
if (есть != надо) {
мир.колобок.anims.play(надо);
мир.уведомить("изменили анимацию колобка");
}
};
// // // //
ОтключитьСтолкновениеСПлатформами = мир => {
мир.столкновениеПлатформы.active = false;
};
// // // //
ВключитьСтолкновениеСПлатформами = мир => {
мир.столкновениеПлатформы.active = true;
};
// // // //
ОстановитьВрагов = мир => {
var враги = мир.враги.getChildren();
for (var н in враги)
{
var враг = враги[н];
враг.body.stop();
}
};
/*
*
* Последовательность
*
*/
мир.разобрать(`
загрузить ресурсы сцены
загрузить ресурсы колобка
создать сцену
создать группы сущностей
создать колобка
создать анимации колобка
определять столкновение колобка и врагов с группами сущностей
изменили управление
переместить колобка
столкновение с врагом
отключить столкновение с платформами
обновить сцену
анимировать колобка
изменили анимацию колобка
остановить врагов
`);