function ballReset(){
ballSpeedX=-ballSpeedX;
ballX = canvas.width/2;
ballY = canvas.height/2;
}
function moveEverything(){
ballX = ballX+ ballSpeedX;
ballY = ballY+ ballSpeedY;
if (ballX<0 ){
if(ballY > paddle1Y&&
ballY < paddle1Y+PADDLE_HEIGHT){
ballSpeedX = -ballSpeedX;
}else{
ballReset();
}}
if (ballX>canvas.width ){
if(ballY>paddle1Y&&ballY<paddle2Y+PADDLE_HEIGHT){
ballSpeedX = -ballSpeedX;
}else{
ballReset()};
if (ballY<0 ){
ballSpeedY=-ballSpeedY;
}
if (ballY>canvas.height ){
ballSpeedY=-ballSpeedY;
}}}
球不会从画布的底部和顶部反射出来。我不确定我的代码中有什么问题,有人能告诉我什么是错的吗?
答案 0 :(得分:1)
您的上边界和下边界检查嵌套在右边缘检查中。这意味着如果球同时从右边缘反弹,则球只能从顶部或底部反弹。正确的缩进非常清楚地表明了这一点:
if (ballX > canvas.width) {
if (ballY > paddle1Y && ballY < paddle2Y + PADDLE_HEIGHT) {
ballSpeedX = -ballSpeedX;
} else {
ballReset()
}
if (ballY < 0) {
ballSpeedY = -ballSpeedY;
}
if (ballY > canvas.height) {
ballSpeedY = -ballSpeedY;
}
}
在右边界检查之外移动上下边界检查应改善这种情况。这里要说的是,虽然缩进和换行技术上没有任何功能,但它们仍然很重要。如果你不确定如何做到这一点,选择一个风格指南并坚持下去 - 一致性是王道。通常,关闭括号应该在它们自己的行上,并且打开括号意味着两个括号之间的整个内容应该缩进一点。
“K&amp; R风格”很常见,总结了支撑游戏。 https://en.wikipedia.org/wiki/Indentation_style#K&R