score_value = 0
lives_value = 3
# Check if collide/overlap
def collision(rleft, rtop, rlength, cX, cY, radius):
rright = rleft + rlength
cbottom = cY + radius
score_value = 0
lives_value = 3
if (rleft <= cX <= rright) and (cbottom >= rtop):
score_value += 10
else:
lives_value -= 1
# Defining variables
rright = rect_x + rect_length
rbottom = rect_y + rect_width
# Call the collision() function
collision(rect_x, rect_y , rect_length, circle_x, circle_y, radius)
我必须创建一个pygame,当一个圆与一个矩形碰撞时,应该添加10点。但是现在比分疯狂地增加了,即使球掉了,我该如何解决呢?以上是我为此项目编写的代码。 original question请帮助
问题是冲突不会被识别一次。在连续的帧中多次检测到它。向函数collision
添加一个返回值,该值指示是否检测到冲突:
def collision(rleft, rtop, rlength, cX, cY, radius):
rright = rleft + rlength
cbottom = cY + radius
score_value = 0
lives_value = 3
collision = (rleft <= cX <= rright) and (cbottom >= rtop)
if collision:
score_value += 10
else:
lives_value -= 1
return collision:
将变量rect_circle_collided
添加到应用程序中,并将collision
的结果存储到变量中。如果collision
为rect_circle_collided
,则仅调用False
:
rect_circle_collided = False
while not done:
# [...]
# Call the collision() function
if not rect_circle_collided:
rect_circle_collided = collision(rect_x, rect_y , rect_length, circle_x, circle_y, radius)
注意,在窗口顶部创建新圆时,必须重置状态(rect_circle_collided = False
)。