камера
This commit is contained in:
41
00160.камера.js
Normal file
41
00160.камера.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
мир.камера = {
|
||||||
|
обновить: обновитьКамеру,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// // // //
|
||||||
|
|
||||||
|
|
||||||
|
function обновитьКамеру()
|
||||||
|
{
|
||||||
|
var тело = мир.объекты.тела[мир.игрок.задано.объект];
|
||||||
|
if (!тело)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var корень = document.getElementById("корень");
|
||||||
|
// Сейчас.
|
||||||
|
var x0 = 0;
|
||||||
|
if (корень.style.left.endsWith("px"))
|
||||||
|
{
|
||||||
|
x0 = корень.style.left.slice(0, -2);
|
||||||
|
}
|
||||||
|
var y0 = 0;
|
||||||
|
if (корень.style.top.endsWith("px"))
|
||||||
|
{
|
||||||
|
y0 = корень.style.top.slice(0, -2);
|
||||||
|
}
|
||||||
|
// Цель.
|
||||||
|
var x1 = window.innerWidth / 2 - тело.position.x;
|
||||||
|
var y1 = window.innerHeight / 2 - тело.position.y;
|
||||||
|
// Плавно.
|
||||||
|
function lerp(v0, v1, t) {
|
||||||
|
return v0 * (1 - t) + v1 * t;
|
||||||
|
}
|
||||||
|
var x = lerp(x0, x1, 0.1);
|
||||||
|
var y = lerp(y0, y1, 0.1);
|
||||||
|
|
||||||
|
корень.style.left = `${x}px`;
|
||||||
|
корень.style.top = `${y}px`;
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
мир.физика.обновить();
|
мир.физика.обновить();
|
||||||
мир.объекты.обновить();
|
мир.объекты.обновить();
|
||||||
мир.игрок.обновить();
|
мир.игрок.обновить();
|
||||||
|
мир.камера.обновить();
|
||||||
requestAnimationFrame(мир.обновить);
|
requestAnimationFrame(мир.обновить);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,11 @@
|
|||||||
объекты: {
|
объекты: {
|
||||||
пол: {
|
пол: {
|
||||||
x: 1000,
|
x: 1000,
|
||||||
y: 300,
|
y: 590,
|
||||||
ширина: 2000,
|
ширина: 2000,
|
||||||
вид: {
|
вид: {
|
||||||
background: "url(р/отладка/основа.jpg) repeat-x",
|
background: "url(р/отладка/основа.jpg) repeat-x",
|
||||||
|
display: "none",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
колобок: {
|
колобок: {
|
||||||
@@ -28,10 +29,19 @@
|
|||||||
background: "url(р/колобок/колобок_неподвижен.png) no-repeat scroll 50% 0% / contain",
|
background: "url(р/колобок/колобок_неподвижен.png) no-repeat scroll 50% 0% / contain",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
фундаментПечи: {
|
||||||
|
x: 840,
|
||||||
|
y: 480,
|
||||||
|
ширина: 550,
|
||||||
|
вид: {
|
||||||
|
background: "url(р/отладка/основа.jpg) repeat-x",
|
||||||
|
//display: "none",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
игрок: {
|
игрок: {
|
||||||
объект: "колобок",
|
объект: "колобок",
|
||||||
скорость: [4, 12],
|
скорость: [4, 13],
|
||||||
клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
|
клавиши: ["ArrowLeft", "ArrowRight", "ArrowUp"],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background: #fbfbfb;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
<script src="00130.объекты.js"></script>
|
<script src="00130.объекты.js"></script>
|
||||||
<script src="00140.ввод.js"></script>
|
<script src="00140.ввод.js"></script>
|
||||||
<script src="00150.игрок.js"></script>
|
<script src="00150.игрок.js"></script>
|
||||||
|
<script src="00160.камера.js"></script>
|
||||||
<script src="01000.пуск.js"></script>
|
<script src="01000.пуск.js"></script>
|
||||||
<script src="01300.пример.json.js"></script>
|
<script src="01300.пример.json.js"></script>
|
||||||
<script src="02000.обновление.js"></script>
|
<script src="02000.обновление.js"></script>
|
||||||
|
|||||||
Reference in New Issue
Block a user