制作一个球从屏幕一侧反弹但没有反弹的游戏
making a game where a ball bounces of side of screen and doesen't
我正在使用 Udemy 上的教程编写这段代码,我正在尝试制作 Pong。我处于早期阶段,只想让球从屏幕边缘反弹。
但事实并非如此。
我认为问题可能出在我定义
的地方
ballspeedx = -ballspeedx
这是我的代码:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id="gameCanvas" width="800" height="600">
</canvas>
<script type="text/javascript">
var canvas;
var canvasContext;
var ballx = 50
var ballspeedx = 12;
window.onload = function() {
var FPS = 80
setInterval(function() {
moveEverything();
drawEverything();
}, 10000 / FPS)
}
function moveEverything() {
ballx = ballx + ballspeedx;
if (ballx > 800) {
console.log("GREATER THAT 800")
ballspeedx = -ballspeedx
ballspeedx = ballspeedx + ballspeedx
console.log("Hello?")
}
if (ballx > 0) {
ballspeedx = 5;
}
}
function drawEverything() {
ballx = ballx + 5;
console.log(ballx)
canvas = document.getElementById('gameCanvas');
canvasContext = canvas.getContext('2d')
canvasContext.fillStyle = 'black';
canvasContext.fillRect(0, 0, canvas.width, canvas.height);
canvasContext.fillStyle = 'white';
canvasContext.fillRect(0, 210, 20, 100);
canvasContext.fillStyle = 'red';
canvasContext.fillRect(ballx, 100, 10, 10);
}
</script>
</body>
</html>
提前致谢。
尝试改变这个:
if (ballx > 0) {
ballspeedx = 5;
}
至
else if (ballx > 0) {
ballspeedx = 5;
}
我认为您正在设置正确的 ballspeedx 值,然后立即进入下一个 if 并覆盖它。
问题出在块
if (ballx > 0) {
ballspeedx = 5;
}
如果球在最右边 (800),它仍然大于零。所以即使你翻转速度(这是你应该做的),它也会自动设置它继续向右移动。我将您的 moveEverything()
函数更改为此,它工作正常:
function moveEverything() {
ballx = ballx + ballspeedx;
if (ballx > 800 || ballx < 0) {
ballspeedx = -ballspeedx;
ballx += ballspeedx;
}
}
此外,您不应该在 drawEverything()
中移动球,那只是糟糕的设计。
我正在使用 Udemy 上的教程编写这段代码,我正在尝试制作 Pong。我处于早期阶段,只想让球从屏幕边缘反弹。 但事实并非如此。 我认为问题可能出在我定义
的地方ballspeedx = -ballspeedx
这是我的代码:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id="gameCanvas" width="800" height="600">
</canvas>
<script type="text/javascript">
var canvas;
var canvasContext;
var ballx = 50
var ballspeedx = 12;
window.onload = function() {
var FPS = 80
setInterval(function() {
moveEverything();
drawEverything();
}, 10000 / FPS)
}
function moveEverything() {
ballx = ballx + ballspeedx;
if (ballx > 800) {
console.log("GREATER THAT 800")
ballspeedx = -ballspeedx
ballspeedx = ballspeedx + ballspeedx
console.log("Hello?")
}
if (ballx > 0) {
ballspeedx = 5;
}
}
function drawEverything() {
ballx = ballx + 5;
console.log(ballx)
canvas = document.getElementById('gameCanvas');
canvasContext = canvas.getContext('2d')
canvasContext.fillStyle = 'black';
canvasContext.fillRect(0, 0, canvas.width, canvas.height);
canvasContext.fillStyle = 'white';
canvasContext.fillRect(0, 210, 20, 100);
canvasContext.fillStyle = 'red';
canvasContext.fillRect(ballx, 100, 10, 10);
}
</script>
</body>
</html>
提前致谢。
尝试改变这个:
if (ballx > 0) {
ballspeedx = 5;
}
至
else if (ballx > 0) {
ballspeedx = 5;
}
我认为您正在设置正确的 ballspeedx 值,然后立即进入下一个 if 并覆盖它。
问题出在块
if (ballx > 0) {
ballspeedx = 5;
}
如果球在最右边 (800),它仍然大于零。所以即使你翻转速度(这是你应该做的),它也会自动设置它继续向右移动。我将您的 moveEverything()
函数更改为此,它工作正常:
function moveEverything() {
ballx = ballx + ballspeedx;
if (ballx > 800 || ballx < 0) {
ballspeedx = -ballspeedx;
ballx += ballspeedx;
}
}
此外,您不应该在 drawEverything()
中移动球,那只是糟糕的设计。