Как использовать if / elif внутри класса, когда вам нужны разные параметры? - PullRequest
1 голос
/ 24 марта 2019

Я делаю класс для размещения внутри всех команд, связанных с клавиатурой pygame, по крайней мере, всего, что мне нужно, но когда я использую, если или равняется «переменная», которую я хочу определить позже, он возвращает ошибкуговорит мне, что это не определено.

Я не знаю достаточно, чтобы сказать в технических терминах, извините за ошибки.Я начал использовать кнопку в качестве аргумента 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

Я хочу использовать функцию клавиш для определения кнопки, чтобы я мог использовать ее позже для каждого ввода с клавиатуры, вместо этого каждый раз записывать все заново.

1 Ответ

0 голосов
/ 24 марта 2019

Сообщение об ошибке

имя '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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...