javascript - 制作一个球从屏幕一侧反弹而没有反弹的游戏
问题描述
我正在尝试制作 Pong 的 Udemy 教程中的代码。我处于早期阶段,只想让球从屏幕边缘反弹。但它没有。我认为问题可能出在我定义的地方
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;
}
如果球在最右边 (800),它仍然大于零。因此,即使您翻转速度(这是您应该做的),它也会自动将其设置为继续向右移动。我将您的moveEverything()
功能更改为此,它工作正常:
function moveEverything() {
ballx = ballx + ballspeedx;
if (ballx > 800 || ballx < 0) {
ballspeedx = -ballspeedx;
ballx += ballspeedx;
}
}
另外,您不应该将球移入drawEverything()
,那只是糟糕的设计。
推荐阅读
- c# - Access second sheets always invalid index
- fortran - 如何在 Fortran 中统一读取实数和复数?
- c# - 为什么在 Archive Every Day 工作正常时使用 Nlog ArchiveEvery Hour 会杀死我的 .Net Windows 服务?
- java - 如何只输出非0的数字,如何禁用零输出?
- machine-learning - 如何使用哈希码方法将数据集拆分为训练和测试数据集
- mongodb - 我是否正确地在猫鼬中正确运行此 AND 查询,因为我没有得到任何东西
- r - R、ggplot2、jtools:如何修改三路约翰逊-内曼交互图
- python - 在多边形区域之间填充
- sql - 存储过程不显示错误信息
- c++ - 如何将输入“三四+五六=”转换为“34+56”?