如何正确地将布尔值初始化为变量以用作 "switch"

How to correctly initialize a Boolean as a variable for use as a "switch"

#Bounce bullet when it reaches corners.
def bullet_bounce(rect):
    bottom_corner = False
    if bottom_corner == False:
        rect.y +=5
        if rect.bottom == 400:
            bottom_corner = True
    if bottom_corner == True:
        rect.y -=5
        if rect.top == 0:
            bottom_corner = False

在使用 pygame 创建 Pong 时,我想在每次到达屏幕角落时使矩形反弹。我想出了这段代码,当我在游戏循环外初始化 bottom_corner 然后 运行 循环内的其余代码时,它按预期工作。但是因为它看起来更干净,所以我想在内部将这段代码作为一个函数来实现。问题是因为在循环 bottom_corner 中调用的函数在每次循环 运行 时都被初始化为 False ,这导致只有前半部分代码被迭代。您对如何解决此问题有任何建议吗?

您应该在函数外部定义变量并将其作为参数发送给函数,然后用 return

取回
def bullet_bounce(rect, bottom_corner):
    if not bottom_corner:
        rect.y +=5
        if rect.bottom == 400:
            bottom_corner = True
    else:
        rect.y -=5
        if rect.top == 0:
            bottom_corner = False

    return bottom_corner

# --- start program ---

bottom_corner = False

# --- some loop ---

while True:

    bottom_corner = bullet_bounce(rect, bottom_corner)

我不确定我是否理解你的问题。但我建议您避免在布尔值(True、False)和布尔变量之间进行相等比较。而不是说 if bottom_corner == True 使用 if bottom_corner:else:

要切换布尔变量,您可以使用 not 运算符

#Bounce bullet when it reaches corners.
def bullet_bounce(rect):
    if bottom_corner: rec.y -=5 
    else rec.y += 5
    if (rec.bottom == 400) or (rect.top == 0): 
        # switch it based on previous value
        bottom_corner = not bottom_corner