#python #pygame
#python #pygame
Вопрос:
Я создаю класс, который помещает в него все команды, связанные с клавиатурой pygame, по крайней мере, все, что мне нужно, но когда я использую значение if или else, равное «переменной», которую я хочу определить позже, он возвращает ошибку, сообщающую мне, что она не определена.
Я не знаю достаточно, чтобы сказать в технических терминах, извините за ошибки. Я начал использовать button в качестве 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 для определения кнопки, чтобы я мог использовать ее позже для каждого ввода с клавиатуры, вместо того, чтобы каждый раз писать все это заново.
Ответ №1:
Сообщение об ошибке
имя ‘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)