我是JS的初学者,我正在努力创建一个简单的游戏。我正在寻找一种方法来停止播放器(20px x 20px)框导致屏幕滚动,我正在寻找一个固定的屏幕,玩家不能超过屏幕的两侧。请参阅下面的先前尝试。
HTML:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="Style.css">
</head>
<body>
<div id="player"></div>
<script type="text/javascript" src="Script.js"></script>
</body>
</html>
CSS:
body{
margin: 0;
padding: 0;
background-color: red;
}
#player{
border-radius: 30%;
padding: 0px;
margin: 0px;
background-color: white;
width: 20px;
height: 20px;
position: absolute;
}
JavaScript的:
var player = document.getElementById("player")
var pros = {'top': 0, 'left': 0, 'speed': 10}
var ws = {'h': screen.height, 'w': screen.width}
document.addEventListener("keydown", function(event){
var keyP = event.key;
if(keyP === "ArrowDown"){
pros.top = pros.top + pros.speed;
}else if(keyP === "ArrowUp"){
pros.top = pros.top - pros.speed;
}else if(keyP === "ArrowLeft"){
pros.left = pros.left - pros.speed;
}else if(keyP === "ArrowRight"){
pros.left = pros.left + pros.speed;
}
if(pros.top < 0){
pros.top = 0;
}else if(pros.top > ws.h){
pros.top = ws.h;
}else if(pros.left < 0){
pros.left = 0;
}else if(pros.left > ws.w){
pros.left = ws.w;
}
player.style.top = `${pros.top}px`;
player.style.left = `${pros.left}px`;
});
现在,我希望元素永远不会逃离给定的屏幕区域。正如您在代码中看到的那样,我尝试使用screen.height / screen.width来控制它,但它仍然会逃离该区域,即使在全屏模式下滚动条也会被激活。对于一场比赛来说,它看起来太乱了。 这是它如何逃离该地区的图片: 在全屏模式下:
通过getBoundingClientRect()
功能可以获得最准确的位置和尺寸测量值。
所以在按键回调的顶部我会添加两行:
var screenRect = document.body.getBoundingClientRect();
var playerRect = player.getBoundingClientRect();
这些需要在每次迭代时计算,以确保“游戏”适应每个屏幕的变化。此外,任何位置增量都以屏幕尺寸的百分比而不是静态像素值更好地计算。
您的屏幕边缘检查应该像这样重写:
if(playerRect.top < 0){
pros.top = 0;
} else if(playerRect.top + playerRect.height > screenRect.height){
// make sure the bottom edge of the player doesn't go over the bottom edge of the screen
pros.top = screenRect.height - playerRect.height;
}
if(playerRect.left < 0){
pros.left = 0;
} else if(playerRect.left + playerRect.width + > screenRect.width){
// make sure the right edge of the player doesn't go over the right edge of the screen
pros.left = screenRect.width - playerRect.width;
}
在CSS方面,尝试以下方法:
body{
margin: 0;
padding: 0;
background-color: red;
width: 100vw;
height: 100vh;
overflow: hidden;
}
#player{
border-radius: 30%;
padding: 0px;
margin: 0px;
background-color: white;
width: 20px;
height: 20px;
position: fixed;
}
PLAYER对象的height
和width
是20px,如您提供的样式表所示。
如果将元素放在2D平面上,那么它的坐标将是其TOP-LEFT角落所在的点。专注于此。
所以,你的JavaScript应该改为:
...
if(pros.top < 0){
pros.top = 0;
}else if(pros.top > ws.h-20){ // changed here
pros.top = ws.h-20; // try playing with the value here
}else if(pros.left < 0){
pros.left = 0;
}else if(pros.left > ws.w-20){ //changed here
pros.left = ws.w-20; // try playing with the value here
}
...
这总是将#player
元素20px放在水平轴上,在垂直轴上放置20px。我成功地限制了水平滚动条的外观,但是垂直消失了只有ws.h-40
的值。
希望这可以帮助。
嘿:)也许这有助于你:
<style type="text/css">
body {
overflow:hidden;
}
</style>
设置overflow: hidden
将隐藏滚动条。