/* * * Реакции * */ ЗагрузитьРесурсыКолобка= мир => { мир.сцена.load.spritesheet( "колобок", "ресурсы/колобок/колобок.png", { frameWidth: 97, frameHeight: 94, } ); }; // // // // СоздатьКолобка = мир => { мир.колобок = мир.сцена.physics.add.sprite(100, 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(скорость); } }; // // // // АнимироватьКолобка = мир => { 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 вещь = вещи[н]; if (вещь.body.touching.down) { вещь.body.stop(); } } }; // // // // НачатьМиганиеКолобка = мир => { var конец = new Date(); конец.setSeconds(конец.getSeconds() + 10); мир.состояниеКолобка.мигание.окончание = конец; 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.5; }; // // // // ВосстановитьПрыгучестьКолобка = мир => { мир.состояниеКолобка.коэффициентПрыгучести = 1; }; /* * * Последовательность * */ мир.разобрать(` загрузить ресурсы сцены загрузить ресурсы колобка создать сцену создать колобка создать анимации колобка настроить столкновение колобка столкновение с врагом начать мигание колобка обновить сцену переместить колобка анимировать колобка мигать колобка остановить передвижение вещей начали мигать колобка отключить столкновение с платформами уменьшить прыгучесть колобка закончили мигать колобка включить столкновение с платформами восстановить прыгучесть колобка `);