如何解决如何分别定义 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)
。
你必须区分leftPaddle
和rightPaddle
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 举报,一经查实,本站将立刻删除。