gpt4 book ai didi

python - 当需要不同的参数时,如何在类中使用 if/elif?

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:15 25 4
gpt4 key购买 nike

我正在做一个类,将有关 pygame 键盘的所有命令放入其中,至少是我需要的所有命令,但是当我使用 if 或 else 等于我稍后要定义的“变量”时,它会返回错误告诉我它没有定义。

我不太了解技术术语,抱歉犯了错误。我开始使用按钮作为 key() 参数,并且遇到了同样的错误,然后我尝试使用 __init__() 但我可以使用它(不知道如何) ,然后我就这样做了...

class control():
def button(self, button):
self.button = button
def exit(self):
if event.type == pygame.QUIT:
pygame.quit()
def key(self, axis, speed):
if event.type == pygame.KEYDOWN:
if event.key == self.button:
axis = 0
axis = speed


ctrl = control()
w = control().button(K_w)
s = control(K_s)
UP = control(K_UP)
DOWN = control(K_DOWN)


while True:
for event in pygame.event.get():
ctrl.exit()
w.key(y1, -5)
s.key(y1, +5)
UP.key(y2, -5)
DOWN.key(y2, +5)
 File "C:/Users/Smith/PycharmProjects/untitled/venv/test0002.py", line 25, in <module>
w = control().button(K_w)
NameError: name 'K_w' is not defined

我想使用 key 函数来定义按钮,这样我就可以稍后为每个键盘输入使用它,而不是每次都重新编写。

最佳答案

错误信息

name 'K_w' is not defined

发生,因为你忘记了模块 namespace 。

常量的名称是 pygame.K_w 而不是 K_w。这些常量放置在 pygame 模块命名空间中。

使用常量的完整名称:

w = control().button(pygame.K_w)

或导入 pygame 常量参见 pygame.locals

from pygame.locals import *

# [...]

w = control().button(K_w)
<小时/>

此外,变量 w 从未定义,因为 control() 确实生成了对象,但 button() 不返回任何对象值(value)。方法按钮应返回 self:

class control():
def button(self, button):
self.button = button
return self

但我建议在 control 类中实现构造函数,而不是在 button 方法中实现(当然,您可以两者都实现):

class control():
def __init__(self, button=0):
self.button = button

ctrl = control()
w = control(K_w)
s = control(K_s)
UP = control(K_UP)
DOWN = control(K_DOWN)
<小时/>

方法key必须返回参数axis的新值:

class control():

# [...]

def key(self, axis, speed):
if event.type == pygame.KEYDOWN:
if event.key == self.button:
axis = speed
return axis

y1, y2 = 0, 0
while True:
for event in pygame.event.get():
ctrl.exit()
y1 = w.key(y1, -5)
y1 = s.key(y1, +5)
y2 = UP.key(y2, -5)
Y2 = DOWN.key(y2, +5)

关于python - 当需要不同的参数时,如何在类中使用 if/elif?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com