Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何分别为x和y定义碰撞?_Python_Class_Object_Pygame_Collision Detection - Fatal编程技术网

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谢谢你。你只是在帖子上看到我的标签(或者,),我在同一主题上发布了另一个问题。它工作得很好,但比分猛涨。它不可见,但同时发生多个碰撞。