乒乓球不会从帆布顶部反射出来

时间:2018-06-14 01:16:37

标签: javascript html5 html5-canvas

   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;
    }}}

球不会从画布的底部和顶部反射出来。我不确定我的代码中有什么问题,有人能告诉我什么是错的吗?

1 个答案:

答案 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