微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何分别定义 x 和 y 的碰撞?

如何解决如何分别定义 x 和 y 的碰撞?

所以在这函数中,我有球和桨之间的碰撞检测和得分(以及其他与这个问题无关的东西)。当球碰到球拍时,它会朝相反的方向反弹。它适用于桨的左侧,但如果球从顶部或底部击中,它就会滑动并且比分飙升。

def Objects (paddle,ball,hits,font,black):  
    if ball.BallRect.colliderect(paddle.PaddleRect):
        ball.vx *= -1
        score_text = font.render(f"score: " + str(hits + 1),True,black)
        temp += 1
        
    else:
        score_text = font.render(f"score: " + str(hits),black)
        window.blit(score_text,(20,20))
    
    return temp

解决方法

Sometimes the ball doesn't bounce off the paddle in pong game

当球碰到左边的球拍时,球会向右弹跳,接下来的 x 方向必须为正。当球碰到右边的球拍时,球向左弹跳,下面的x方向必须为负。
使用 abs(x) 计算数字的绝对值。球的新方向是 abs(ball.vx)-abs(ball.vx)

你必须区分leftPaddlerightPaddle

if ball.BallRect.colliderect( leftPaddle.PaddleRect ):
    ball.vx = abs(ball.vx)

    # [...]

elif ball.BallRect.colliderect( rightPaddle.PaddleRect ):
    ball.vx = -abs(ball.vx)

    # [...]

或者您需要知道击中的是哪个桨。将 "left""right" 传递给参数 side

def Objects(paddle,side,ball,hits,font,black):  
    if ball.BallRect.colliderect(paddle.PaddleRect):
      
        if side == "left":
            ball.vx = abs(ball.vx)
        else:
            ball.vx = -abs(ball.vx)
    
      
        score_text = font.render(f"Score: " + str(hits + 1),True,black)
        temp += 1
        
    else:
        score_text = font.render(f"Score: " + str(hits),black)
        window.blit(score_text,(20,20))
    
    return temp

如果您只有 1 个桨,设置正确的方向就足够了。如果您有合适的桨:

def Objects(paddle,black):  
    if ball.BallRect.colliderect(paddle.PaddleRect):

        ball.vx = -abs(ball.vx)

        score_text = font.render(f"Score: " + str(hits + 1),black)
        temp += 1

    else:
        score_text = font.render(f"Score: " + str(hits),20))
    
    return temp

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。