|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- /*
- *
- * Реакции
- *
- */
-
-
- ЗагрузитьРесурсыКолобка= мир =>
- {
- мир.сцена.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 (кк.down && кв.up && мир.колобок.прыжок)
- {
- мир.колобок.вещь = вещь.name;
- мир.уведомить("колобок прыгнул на вещь");
- }
- // Передвижение вещей.
- if (кк.down && (кк.left || кк.right) && (кв.left || кв.right))
- {
- мир.колобок.датаПередвиженияВещи = new Date();
- }
- };
-
- 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 вещи = мир.вещи.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("окончание прыжка. скорость:", мир.колобок.скоростьПадения);
- };
-
-
- // // // //
-
-
- ОпределитьПередвижениеВещей = мир =>
- {
- if (!мир.колобок.датаПередвиженияВещи)
- {
- return;
- }
-
- var было = мир.колобок.передвижениеВещи != null ? мир.колобок.передвижениеВещи : false;
- var стало = new Date() - мир.колобок.датаПередвиженияВещи < 10;
- if (было != стало)
- {
- мир.колобок.передвижениеВещи = стало;
- if (стало)
- {
- console.debug("колобок начал передвижение вещи");
- мир.уведомить("колобок начал передвижение вещи");
- }
- else
- {
- console.debug("колобок закончил передвижение вещи");
- мир.уведомить("колобок закончил передвижение вещи");
- }
- }
- };
-
-
- /*
- *
- * Последовательность
- *
- */
-
-
- мир.разобрать(`
- загрузить ресурсы сцены
- загрузить ресурсы колобка
- создать сцену
- создать колобка
- создать анимации колобка
- настроить столкновение колобка
- столкновение с врагом
- начать мигание колобка
- обновить сцену
- переместить колобка
- анимировать колобка
- определить окончание прыжка колобка
- мигать колобка
- определить передвижение вещей
- # остановить передвижение вещей
- колобок начал прыжок
- воспроизвести звук прыжка
- вывести начало прыжка в консоль
- колобок закончил прыжок
- вывести окончание прыжка в консоль
- начали мигать колобка
- # отключить столкновение с платформами и вещами
- # уменьшить прыгучесть колобка
- закончили мигать колобка
- включить столкновение с платформами и вещами
- восстановить прыгучесть колобка
- `);
-
|