Python 如何分别为x和y定义碰撞?
所以在这个函数中,我有球和桨之间的碰撞检测和得分(以及其他与这个问题无关的东西)。当球碰到球拍时,它会朝着反方向反弹。它适用于左侧的球拍,但如果球从顶部或底部击中,它会滑动,得分会急剧上升Python 如何分别为x和y定义碰撞?,python,class,object,pygame,collision-detection,Python,Class,Object,Pygame,Collision Detection,所以在这个函数中,我有球和桨之间的碰撞检测和得分(以及其他与这个问题无关的东西)。当球碰到球拍时,它会朝着反方向反弹。它适用于左侧的球拍,但如果球从顶部或底部击中,它会滑动,得分会急剧上升 def Objects (paddle,ball,hits,font,black): if ball.BallRect.colliderect(paddle.PaddleRect): ball.vx *= -1 score_text = font.render(f&
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),True, black)
window.blit(score_text,(20,20))
return temp
看
当球碰到左挡板时,球会向右反弹,并且以下x方向必须为正。当球碰到右挡板时,球会反弹到左侧,并且以下x方向必须为负。用于计算数字的绝对值。球的新方向是
abs(ball.vx)
或-abs(ball.vx)
您必须区分左桨
和右桨
如果ball.BallRect.colliderect(LeftPable.PadleRect):
ball.vx=abs(ball.vx)
# [...]
elif ball.BallRect.colliderect(右桨.右桨):
ball.vx=-abs(ball.vx)
# [...]
或者你需要知道哪个桨被击中。将“left”
或“right”
传递到参数侧
:
def对象(桨、侧、球、击、字体、黑色):
如果ball.BallRect.colliderect(拨动拨动拨动):
如果边==“左”:
ball.vx=abs(ball.vx)
其他:
ball.vx=-abs(ball.vx)
score\u text=font.render(f“score:+str(点击次数+1),真,黑色)
温度+=1
其他:
score\u text=font.render(f“score:+str(命中),真,黑色)
窗口。blit(分数文本,(20,20))
返回温度
如果您只有一个拨杆,设置正确的方向就足够了。如果你有正确的桨:
def对象(桨、球、击、字体、黑色):
如果ball.BallRect.colliderect(拨动拨动拨动):
ball.vx=-abs(ball.vx)
score\u text=font.render(f“score:+str(点击次数+1),真,黑色)
温度+=1
其他:
score\u text=font.render(f“score:+str(命中),真,黑色)
窗口。blit(分数文本,(20,20))
返回温度
Î放弃添加一个桨。下面是一个屏幕截图,当球击到桨的顶部或底部时,它会被击中slides@Tinko那么问题是什么呢?如果你有正确的桨,ball.vx=-abs(ball.vx)
就是解决方案。我已经扩展了答案。谢谢你。我看到了你回复的另一个帖子,它现在起作用了。顺便问一下,为什么我在每一篇关于堆栈溢出的帖子上都能看到你?@Tinko谢谢你。你只是在帖子上看到我的标签(或者,),我在同一主题上发布了另一个问题。它工作得很好,但比分猛涨。它不可见,但同时发生多个碰撞。