/* * * Реакции * */ ЗагрузитьРесурсыКолобка= мир => { мир.сцена.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; } }; /* * * Последовательность * */ мир.разобрать(` загрузить ресурсы сцены загрузить ресурсы колобка создать сцену создать колобка создать анимации колобка настроить столкновение колобка столкновение с врагом начать мигание колобка обновить сцену переместить колобка анимировать колобка определить окончание прыжка колобка мигать колобка остановить скользящие вещи колобок начал прыжок воспроизвести звук прыжка вывести начало прыжка в консоль колобок закончил прыжок вывести окончание прыжка в консоль начали мигать колобка отключить столкновение с платформами и вещами уменьшить прыгучесть колобка закончили мигать колобка включить столкновение с платформами и вещами восстановить прыгучесть колобка `);