Сообщение об ошибке
имя 'K_w' не определено
происходит, потому что вы забыли пространство имен модуля.
Имяконстанта равна 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()
не возвращаетлюбое значение.Кнопка метода должна вернуть 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)