Проблема при использовании клавиатурных команд в Pygame - PullRequest
1 голос
/ 09 октября 2019

Во время программирования игры я столкнулся с проблемой с клавиатурными командами. В моем коде у меня есть фуд-бар и переменная денежного банка с именем money_bar. Панель еды в моей игре будет увеличиваться, когда я нажимаю клавишу, скажем, f , в моей игре, а также игра вычитает, скажем, $ 10 из моего money_bar, когда я нажимаю f .
Индикатор питания показывает текущее количество еды, которое у меня есть, которое должно уменьшаться каждую секунду. Однако, похоже, что ни одна из моих клавиатурных команд в event() не работает. Могу ли я знать, в чем проблема в моем коде? Это моя инициализация food_bar и `money_bar:

def __init__(self):
        pygame.init()
        self.clock = pygame.time.Clock()
        self.living = 1
        self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
        pygame.display.set_caption(TITLE)
        self.time = pygame.time.get_ticks()
        pygame.key.set_repeat(500, 100)
        self.all_sprites = pygame.sprite.Group()
        self.console = Console(self, 0)
        self.player = Player(self, 390, 595)
        self.work = Work(self, 450, 250)
        self.food_station = Food_Station(self, 750, 200)
        self.food = Food(self, 25, 20)
        self.education = Education(self, 300, 10)
        self.school = School(self, 100, 200)
        self.family = Family(self, 600, 10)
        self.money = Money(self, 800, 15)
        initial_food = 100
        self.food_bar = initial_food
        initial_money = 0
        self.money_bar = initial_money
        initial_education = "Student"
        self.education_level = initial_education
        initial_family = 3
        self.family_member = 3

Здесь я запускаю основной алгоритм:

    def run(self):
        self.playing = True
        self.hunger()
        while self.playing:
            self.dt = self.clock.tick(FPS) / 1000
            self.events()
            self.draw()
            self.update()

и вот как я проверяю события (включая команды клавиатуры)

    def events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.quit()
            if event.type == self.HUNGEREVENT:
                self.food_bar = self.food_bar - 10
                self.all_sprites.update()
                pygame.display.flip()

            if event.type == pygame.K_f:
                self.money_bar = self.money_bar - 10
                self.food_bar = self.food_bar + 15
                self.all_sprites.update()
                pygame.display.flip()

            if event.type == pygame.K_ESCAPE:
                self.quit()

Заранее спасибо

1 Ответ

1 голос
/ 09 октября 2019

В то время как pygame.K_f является ключевой константой перечислителя (см. pygame.key), содержимое event.type является константой перечислителя событий (см. pygame.event).
Если вы хотите определить, нажата ли определенная клавиша, вы должны проверить, является ли тип события pygame.KEYDOWN (или pygame.KEYUP для отпускания кнопки) и равен ли атрибут .key события событию перечислителю ключа,например:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        self.quit()

    # [...]

    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_f:
            # [...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...