如何正确地将布尔值初始化为变量以用作 "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
#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