检测到冲突时如何添加10个标记?

问题描述 投票:0回答:1
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请帮助

python python-3.x pygame collision-detection collision
1个回答
0
投票

问题是冲突不会被识别一次。在连续的帧中多次检测到它。向函数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的结果存储到变量中。如果collisionrect_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)。

© www.soinside.com 2019 - 2024. All rights reserved.