почти стрела

This commit is contained in:
2021-07-27 15:43:29 +03:00
parent 088b978343
commit c173f0f6ae
5 changed files with 88 additions and 42 deletions

View File

@@ -37,7 +37,7 @@
} }
мир.игрок.переместить(); мир.игрок.переместить();
мир.игрок.задатьМаскуСтолкновения(); //мир.игрок.задатьМаскуСтолкновения();
мир.игрок.отслеживатьПрыжкиПриземления(); мир.игрок.отслеживатьПрыжкиПриземления();
}; };
@@ -77,31 +77,14 @@
// // // // // // // //
/*
мир.игрок.задатьМаскуСтолкновения = function() мир.игрок.задатьМаскуСтолкновения = function()
{ {
var прыжок = мир.игрок.тело.velocity.y < -1; var прыжок = мир.игрок.тело.velocity.y < -1;
var маска = прыжок ? 1 : (1 | 2); var маска = прыжок ? 1 : (1 | 2);
мир.игрок.тело.collisionFilter.mask = маска; мир.игрок.тело.collisionFilter.mask = маска;
/*
if (тело.velocity.y < мир.игрок.minv)
{
мир.игрок.minv = тело.velocity.y;
}
if (тело.velocity.y > мир.игрок.maxv)
{
мир.игрок.maxv = тело.velocity.y;
}
document.getElementById("отладка").innerHTML = `min: ${мир.игрок.minv} max: ${мир.игрок.maxv}`;
if (Math.abs(мир.игрок.было - тело.velocity.y) > 0.001)
{
мир.игрок.было = тело.velocity.y;
console.debug("vel", мир.игрок.было);
}
*/
}; };
*/
// // // / // // // /

View File

@@ -0,0 +1,54 @@
мир.маскиПрыжков = {
задано: {},
};
// // // //
мир.ключники.push(function(ключ, путь, значение){
if (!путь[0].startsWith("маскиПрыжков"))
{
return;
}
var имя = путь[1];
var свойство = путь.slice(2).join(".");
if (!мир.маскиПрыжков.задано[имя])
{
мир.маскиПрыжков.задано[имя] = {};
}
мир.маскиПрыжков.задано[имя][свойство] = значение;
});
// // // //
мир.маскиПрыжков.обновить = function()
{
var за = мир.маскиПрыжков.задано;
for (var имя in за)
{
var з = за[имя];
var объект = з["объект"];
var скорость = з["скорость"];
var маскаДо = з["маски.0"];
var маскаПосле = з["маски.1"];
if (!объект || (скорость == null) || (маскаДо == null) || (маскаПосле == null))
{
continue;
}
var тело = мир.объекты.тела[объект];
if (!тело)
{
continue;
}
var маска = (тело.velocity.y < скорость) ? маскаДо : маскаПосле;
тело.collisionFilter.mask = маска;
}
};

View File

@@ -4,6 +4,7 @@
мир.объекты.обновить(); мир.объекты.обновить();
мир.игрок.обновить(); мир.игрок.обновить();
мир.слежение.обновить(); мир.слежение.обновить();
мир.маскиПрыжков.обновить();
requestAnimationFrame(мир.обновить); requestAnimationFrame(мир.обновить);
}; };

View File

@@ -21,7 +21,7 @@
ширина: 355, ширина: 355,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
}, },
полКрышки: { полКрышки: {
@@ -30,7 +30,7 @@
ширина: 135, ширина: 135,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
}, },
полСправа: { полСправа: {
@@ -39,7 +39,7 @@
ширина: 1505, ширина: 1505,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
}, },
стол: { стол: {
@@ -48,7 +48,7 @@
ширина: 610, ширина: 610,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -62,7 +62,7 @@
ширина: 200, ширина: 200,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
angle: -0.0698, angle: -0.0698,
@@ -112,7 +112,7 @@
}, },
игрок: { игрок: {
объект: "кирпич", объект: "кирпич",
скорость: [5, 12], скорость: [5, 12.5],
клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"], клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
}, },
слежение: { слежение: {
@@ -127,6 +127,13 @@
скорость: 0.1, скорость: 0.1,
}, },
}, },
маскиПрыжков: {
игрок: {
объект: "кирпич",
скорость: -1,
маски: [1, 1|2],
},
},
}); });
// // // // // // // //
@@ -141,7 +148,7 @@
ширина: 550, ширина: 550,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -156,7 +163,7 @@
высота: 10, высота: 10,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -171,7 +178,7 @@
высота: 10, высота: 10,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -186,7 +193,7 @@
высота: 10, высота: 10,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -201,7 +208,7 @@
высота: 10, высота: 10,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -216,7 +223,7 @@
высота: 10, высота: 10,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -231,7 +238,7 @@
высота: 10, высота: 10,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
//display: "none", display: "none",
}, },
физика: { физика: {
collisionFilter: { collisionFilter: {
@@ -267,14 +274,6 @@
подкинули: false, подкинули: false,
}; };
/*
мир.отладка = {
сенсор: null,
стрела: null,
срабатывание: false,
};
*/
мир.разобрать({ мир.разобрать({
объекты: { объекты: {
сенсор: { сенсор: {
@@ -314,6 +313,7 @@
ширина: 100, ширина: 100,
вид: { вид: {
background: "url(р/отладка/основа.jpg)", background: "url(р/отладка/основа.jpg)",
display: "none",
}, },
физика: { физика: {
isStatic: true, isStatic: true,
@@ -361,9 +361,16 @@
мир.подкидываниеСтрелы.подкинули = true; мир.подкидываниеСтрелы.подкинули = true;
Matter.Body.setVelocity( Matter.Body.setVelocity(
мир.объекты.тела.стрела, мир.объекты.тела.стрела,
{ x: 0, y: -мир.игрок.приземление.скорость * 2 } { x: 0, y: -мир.игрок.приземление.скорость * 1.2 }
); );
}, },
], ],
}, },
маскиПрыжков: {
стрела: {
объект: "стрела",
скорость: -1,
маски: [0, 2|4]
},
},
}); });

View File

@@ -38,6 +38,7 @@
<script src="300.действия.js"></script> <script src="300.действия.js"></script>
<script src="320.игрок.js"></script> <script src="320.игрок.js"></script>
<script src="340.слежение.js"></script> <script src="340.слежение.js"></script>
<script src="360.маскиПрыжков.js"></script>
<script src="400.столкновения.js"></script> <script src="400.столкновения.js"></script>
<script src="700.пуск.js"></script> <script src="700.пуск.js"></script>
<script src="800.пример.json.js"></script> <script src="800.пример.json.js"></script>