|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- мир.игрок = {
- задано: {},
- обновить: 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 = маска;
- }
|