// // // // // Основа избы // // // // мир.разобрать({ заголовок: "Колобку здесь быть", изображения: { дом: { ширина: 2000, высота: 600, вид: { background: "url(р/сцены/изба.jpg)", }, }, }, объекты: { полСлева: { x: 0, y: 580, ширина: 355, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, }, полКрышки: { x: 357, y: 580, ширина: 135, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, }, полСправа: { x: 495, y: 580, ширина: 1505, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, }, стол: { x: 1253, y: 420, ширина: 610, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, подоконник: { x: 1673, y: 375, ширина: 200, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { angle: -0.0698, collisionFilter: { category: 2, }, }, }, }, звуки: { изба: { события: ["вошли в избу"], файл: "р/звуки/387922__setuniman__scheming-1o95.mp3", повторять: true, останов: ["покинули избу"], }, }, }); // // // // // Игрок // // // // мир.разобрать({ изображения: { колобок: { ширина: 70, высота: 70, вид: { background: "url(р/колобок/колобок_неподвижен.png)", //"z-index": 10, }, }, изоСенсорИгрока: { ширина: 70, высота: 70, вид: { background: "url(р/отладка/основа.jpg)", }, }, изоПодошваИгрока: { ширина: 40, высота: 20, вид: { background: "url(р/отладка/основа.jpg)", }, }, }, тела: { подошваИгрока: { x: 100, y: 450, ширина: 40, высота: 20, часть: true, физика: { isStatic: false, inertia: Infinity, }, }, сенсорИгрока: { x: 100, y: 400, ширина: 70, высота: 70, часть: true, физика: { isSensor: true, isStatic: false, }, }, игрок: { части: ["подошваИгрока", "сенсорИгрока"], физика: { isStatic: false, inertia: Infinity, }, }, }, объекты: { /* кирпич: { x: 100, y: 350, высота: 20, ширина: 40, вид: { background: "url(р/отладка/основа.jpg)", //display: "none", }, физика: { isStatic: false, inertia: Infinity, }, }, */ }, игрок: { //объект: "кирпич", тело: "игрок", скорость: [5, 12.5], клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"], }, слежение: { колобок: { //объект: "кирпич", тело: "игрок", изображение: "колобок", смещение: [-35, -35], скорость: 1, }, камера: { //объект: "кирпич", тело: "игрок", скорость: 0.1, }, /* сенсорИгрока: { тело: "сенсорИгрока", изображение: "изоСенсорИгрока", смещение: [-35, -35], }, */ /* подошваИгрока: { тело: "подошваИгрока", изображение: "изоПодошваИгрока", смещение: [-20, -10], }, */ }, маскиПрыжков: { игрок: { //объект: "кирпич", тело: "игрок", скорость: -1, маски: [1, 1|2], }, }, звуки: { прыжокИгрока: { события: ["игрок начал прыжок"], файл: "р/звуки/331381__qubodup__public-domain-jump-sound.wav", }, }, }); // // // // // Платформы и объекты печи // // // // мир.разобрать({ объекты: { фундаментПечи: { x: 570, y: 470, ширина: 550, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, полка1: { x: 660, y: 335, ширина: 40, высота: 10, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, полка2: { x: 767, y: 335, ширина: 40, высота: 10, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, полка3: { x: 855, y: 335, ширина: 40, высота: 10, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, полкаСамовара: { x: 975, y: 355, ширина: 70, высота: 10, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, лежанкаПечки: { x: 600, y: 242, ширина: 330, высота: 10, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, основаниеТрубыПечки: { x: 937, y: 175, ширина: 130, высота: 10, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { collisionFilter: { category: 2, }, }, }, самовар: { x: 650, y: 300, ширина: 70, высота: 120, вид: { background: "url(р/вещи/самовар.png) no-repeat scroll 0% 0% / contain", }, физика: { isStatic: false, //inertia: Infinity, }, }, }, }); // // // // // Подкидывание стрелы // // // // мир.разобрать({ объекты: { сенсор: { x: 1280, y: 400, ширина: 120, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { isStatic: true, isSensor: true, }, }, стрела: { x: 1230, y: 350, высота: 30, ширина: 200, вид: { display: "inline-block", background: "url(р/вещи/стрела.png) no-repeat scroll 0% 0% / contain", transform: "scaleX(-1)", }, физика: { isStatic: false, inertia: Infinity, collisionFilter: { category: 4, }, }, }, лук: { x: 1250, y: 200, ширина: 100, вид: { background: "url(р/отладка/основа.jpg)", display: "none", }, физика: { isStatic: true, collisionFilter: { category: 4, }, }, }, }, столкновения: { стрелаНачало: { объекты: ["сенсор"], тела: ["игрок"], событие: "сенсор стрелы", }, стрелаКонец: { объекты: ["стрела", "лук"], событие: "стрела и лук", }, }, маскиПрыжков: { стрела: { объект: "стрела", скорость: -1, маски: [0, 2|4] }, }, звуки: { зарядкаЛука: { события: ["закинули стрелу"], файл: "р/звуки/543927__eminyildirim__pistol-gun-cocking.wav", }, }, }); function ПодкидываниеСтрелы() { this.создать = function() { this.времяСтрелы = null; this.времяПриземления = null; this.подкинули = false; this.закинули = false; this.завершить = null; мир.события.подписать(this); }; this.обработатьСобытие = function(событие) { if (событие == "сенсор стрелы") { this.времяСтрелы = мир.физика.движок.timing.timestamp; this.подкинуть(); } else if (событие == "игрок приземлился") { this.времяПриземления = мир.физика.движок.timing.timestamp; this.подкинуть(); } else if (событие == "игрок начал прыжок") { this.времяСтрелы = null; this.времяПриземления = null; this.подкинули = false; } else if ( (событие == "стрела и лук") && this.закинули && this.завершить ) { мир.события.уведомить("закинули стрелу"); мир.события.отписать(this); this.завершить(); } }; this.подкинуть = function() { if ( this.подкинули || !this.времяСтрелы || !this.времяПриземления || Math.abs(this.времяСтрелы - this.времяПриземления) > 0.00001 || Math.abs(мир.объекты.тела.стрела.velocity.y) > 0.00001 ) { return; } this.подкинули = true; Matter.Body.setVelocity( мир.объекты.тела.стрела, { x: 0, y: -мир.игрок.приземление.скорость * 1.2 } ); if (мир.игрок.приземление.скорость > 16) { this.закинули = true; } }; // Конструктор. this.создать(); } мир.подкидываниеСтрелы = new ПодкидываниеСтрелы(); мир.подкидываниеСтрелы.завершить = function() { мир.подкидываниеСтрелы = null; }; // Запустить звук избы мир.события.уведомить("вошли в избу"); // // // // // Отладка событий // // // // function ОтладкаСобытий() { this.обработатьСобытие = function(событие) { if (событие.startsWith("игрокПаук")) { console.debug("событие", событие); } }; // Конструктор. мир.события.подписать(this); } мир.отладкаСобытий = new ОтладкаСобытий(); // // // // // Пауки // // // // мир.разобрать({ объекты: { паук1: { x: 680, y: 300, ширина: 30, вид: { background: "url(р/животные/паук.png) no-repeat scroll 0% 0% / contain", }, физика: { isStatic: false, isSensor: true, }, }, }, столкновения: { игрокПаук1: { объекты: ["паук1"], тела: ["игрок"], событие: "игрокПаук1", }, }, движение: { паук1: { объекты: ["паук1"], скорость: [0.7, 1], x: [610, 1080], y: [350, 450], }, }, }); // // // // // Повреждение игрока // // // // function ПовреждениеИгрока(события, колобок) { this.создать = function() { события.подписать(this); this.создатьМигание(); this.мигаем = false; }; this.создатьМигание = function() { var вид = document.createElement('style') вид.innerText = ` .мигание { animation: мигатель 0.5s linear infinite; } @keyframes мигатель { 50% { opacity: 0; } } `; document.head.appendChild(вид) }; this.обработатьСобытие = function(событие) { if (событие.startsWith("игрокПаук")) { if (this.мигаем) { return; } колобок.classList.add("мигание"); } }; // Конструктор. this.создать(); } мир.повреждениеИгрока = new ПовреждениеИгрока(мир.события, мир.изображения.элементы.колобок);