мир.игрок = { задано: {}, обновить: function() { переместитьИгрока(); задатьИгрокуМаскуСтолкновения(); обновитьРаз(); }, раз: null, }; // // // // мир.ключники.push(function(ключ, путь, значение){ if (!ключ.startsWith("игрок")) { return; } var свойство = путь.slice(1).join("."); мир.игрок.задано[свойство] = значение; одинРазСоздать(); }); // // // // function одинРазСоздать() { if (мир.игрок.раз) { return; } var элемент1 = document.createElement("div"); элемент1.style.position = "absolute"; элемент1.style.display = "block"; элемент1.style.transformOrigin = "center"; элемент1.style.width = `70px`; элемент1.style.height = `10px`; элемент1.style.background = "url(р/отладка/основа.jpg)", document.getElementById("корень").appendChild(элемент1); var фи = { isStatic: false, inertia: Infinity, collisionFilter: { mask: 1, }, }; var тело1 = Matter.Bodies.rectangle(1100, 190, 70, 10, фи); Matter.Composite.add(мир.физика.движок.world, тело1); var элемент2 = document.createElement("div"); элемент2.style.position = "absolute"; элемент2.style.display = "block"; элемент2.style.transformOrigin = "center"; элемент2.style.width = `70px`; элемент2.style.height = `70px`; элемент2.style.background = "url(р/колобок/колобок_неподвижен.png)", document.getElementById("корень").appendChild(элемент2); var ф2 = { isStatic: false, inertia: Infinity, collisionFilter: { mask: 1, }, }; var тело2 = Matter.Bodies.rectangle(1100, 150, 70, 70, ф2); Matter.Composite.add(мир.физика.движок.world, тело2); var ограничитель = Matter.Constraint.create({ bodyA: тело1, bodyB: тело2, stiffness: 1, }); Matter.Composite.add(мир.физика.движок.world, ограничитель); мир.игрок.раз = { элемент1: элемент1, тело1: тело1, элемент2: элемент2, тело2: тело2, } console.debug("создано раз"); } // // // // function обновитьРаз() { if (!мир.игрок.раз) { return; } мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент1, мир.игрок.раз.тело1); мир.синхронизироватьЭлементТело(мир.игрок.раз.элемент2, мир.игрок.раз.тело2); } // // // // function переместитьИгрока() { if (!мир.игрок.раз) { return; } //var тело = мир.объекты.тела[мир.игрок.задано.объект]; //var тело = мир.объекты.тела["игрок"]; var тело = мир.игрок.раз.тело1; //var тело = мир.игрок.раз.тело; if (!тело) { return; } var к = [ мир.игрок.задано["клавиши.0"], мир.игрок.задано["клавиши.1"], мир.игрок.задано["клавиши.2"], ]; var влево = (мир.ввод.клавиши[к[0]] == true); var вправо = (мир.ввод.клавиши[к[1]] == true); var вверх = (мир.ввод.клавиши[к[2]] == true); var скоростьГ = мир.игрок.задано["скорость.0"]; var скоростьВ = мир.игрок.задано["скорость.1"]; var скоростьY = (вверх && Math.abs(тело.velocity.y) <= 0.00001) ? -скоростьВ : тело.velocity.y; var скоростьX = 0; if (влево) { скоростьX = -скоростьГ; } else if (вправо) { скоростьX = скоростьГ; } Matter.Sleeping.set(тело, false); Matter.Body.setVelocity(тело, { x: скоростьX, y: скоростьY }); Matter.Sleeping.set(мир.игрок.раз.тело2, false); Matter.Body.setVelocity(мир.игрок.раз.тело2, { x: скоростьX, y: скоростьY }); } // // // // function задатьИгрокуМаскуСтолкновения() { if (!мир.игрок.раз) { return; } //var тело = мир.объекты.тела[мир.игрок.задано.объект]; //var тело = мир.объекты.тела["игрок"]; var тело = мир.игрок.раз.тело1; //var тело = мир.игрок.раз.тело; if (!тело) { return; } var прыжок = тело.velocity.y < -1; var маска = прыжок ? 1 : (1 | 2); тело.collisionFilter.mask = маска; }