好的,所以我的桨碰撞效果很好:

if(velo.y > 0){
            float t = ((position.y - radius) - paddle.position.y)/ velo.y;

            float ballHitX = position.x + velo.x * t;

            if(t <= 1.0){
                if(ballHitX >= paddle.position.x && ballHitX <= paddle.position.x + paddle.width){
                    velo.y = -velo.y;
                }
            }
        }


但是我的墙撞不是。 (球在桨下时上升,在非桨下时下降)

if(velo.y < 0){
                float t = ((position.y - radius) - (wall[2].y + wall[2].height))/ velo.y;

                if(t <= 1.0){
                velo.y = -velo.y;
                }
            }


我如何阻止该错误并使其发生变化,以使球从墙上弹起?

最佳答案

我的猜测是您要翻转两次。

if(wall) {
    velo = -velo;
}
if(paddle) {
    velo = -velo;
}


因此,当您进行划桨时,它就像这样:

am i hitting the wall? nope
am i hitting the paddle? yep! okay flip velocity


但是,当您砌墙时,它就像这样:

am i hitting the wall? yep! okay flip velocity
am i hitting the paddle? yep! okay flip velocity


因此,因为您同时遇到这两个条件,所以翻转了两次。

您需要确定是否已经翻转以防止两次翻转。

07-27 21:56