#python #dictionary #pygame
#python #словарь #pygame
Вопрос:
Это мое объяснение: pygame.event.get() возвращает словарь событий в очереди, а event — это запись в словаре. Каждое событие в словаре имеет тип и ключ (среди прочих атрибутов), и это то, что мы сравниваем в операторах if .
pygame.ЗАВЕРШИТЕ работу и pygame.KEYDOWN — это типы событий pygame.K_RIGHT — это ключ события
Только если эти события находятся в очереди, будет выполнен соответствующий код
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
snake.move_snake_right()
Это аналогично сбору овощей в супермаркете: вас ждет «очередь» из продуктов, у каждого из которых есть тип, вес, срок годности и т. Д. Вы пройдетесь по каждому из них, и только если это корнеплод типа и называется пастернак, вы его подберете.
У кого-нибудь есть лучшее объяснение словарей?
Кроме того, почему вы вызываете словари как
Dictionary[Entry]
но здесь ваше призвание
pygame.event.get().key
?
Комментарии:
1.
pygame.event.get()
не возвращает словарь. Он возвращает списокpygame.event.Event
объектов
Ответ №1:
Это мое объяснение: pygame.event.get() возвращает словарь событий в очереди, а event — это запись в словаре.
Нет. pygame.event.get()
возвращает список. Вы можете сами проверить исходный код здесь .
Каждое событие в словаре имеет тип и ключ (среди прочих атрибутов), и это то, что мы сравниваем в операторах if .
У каждого события есть type
, но не у каждого события есть key
.
Вот список всех атрибутов для каждого типа события:
QUIT none
ACTIVEEVENT gain, state
KEYDOWN key, mod, unicode, scancode
KEYUP key, mod
MOUSEMOTION pos, rel, buttons
MOUSEBUTTONUP pos, button
MOUSEBUTTONDOWN pos, button
JOYAXISMOTION joy (deprecated), instance_id, axis, value
JOYBALLMOTION joy (deprecated), instance_id, ball, rel
JOYHATMOTION joy (deprecated), instance_id, hat, value
JOYBUTTONUP joy (deprecated), instance_id, button
JOYBUTTONDOWN joy (deprecated), instance_id, button
VIDEORESIZE size, w, h
VIDEOEXPOSE none
USEREVENT code
Чтобы процитировать документы:
Все
pygame.event.EventType
экземпляры содержат идентификатор типа события и атрибуты, специфичные для этого типа события. Идентификатор типа события доступен как pygame.event .Свойство EventType.type .
Я предлагаю вам прочитать связанный документ, потому что он объясняет все, что вам нужно знать о событиях.
Только если эти события находятся в очереди, будет выполнен соответствующий код
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
snake.move_snake_right()
Строка if event.type == pygame.KEYDOWN:
будет выполняться для каждого pygame.event.get()
возвращенного события.
Следующая строка ( if event.key == pygame.K_RIGHT:
) будет выполнена только в том случае, если if
выражение в предыдущей строке вернуло истинное значение, что произойдет только в том случае, если событие, которое мы проверяем в данный момент, имеет type
атрибут, равный pygame.KEYDOWN
.
И если key
атрибут равен pygame.K_RIGHT
, snake.move_snake_right()
будет выполнен только тогда.
Это не имеет ничего общего со словарями. Это просто то, как работает цикл с for
if
операторами and .
Комментарии:
1. является ли pygame.key.get_pressed() словарем всех клавиш со значениями True / False, если они нажаты?
2. В принципе да, но:
pygame.key.get_pressed
это функция, которая возвращает aScancodeWrapper
, которая сама является подклассом tuple . Поскольку ключевые константы pygame (напримерK_a
, etc.) являются числами, они используются для доступа к элементамScancodeWrapper
, поскольку это кортеж, который выглядит как(0, 0, 0, 0, 0, 0, 0, ....., 0)
.
Ответ №2:
Нет, это не словарь, а его итерируемый (список, кортеж или что-то, что вы можете перебирать)
О словарях
Словари хранятся в парах ключей и значений.
Например
person = {"name": "Mickey", "age": 44}
Доступ к значению
Чтобы получить доступ к любому из этих значений (Mickey или 44), вам необходимо указать правильный ключ:
person["name"]
Представьте себе 1000 комнат с запертыми дверями. Чтобы получить доступ к тому, что находится в определенной комнате, вам сначала нужен ключ (который открывает дверь).
Получение списка всех ключей
Вы можете получить список ключей пользователя следующим образом
person.keys()
Вы можете выполнять итерации / циклы следующим образом:
for k in person.keys():
print(person[k])
Представьте, что у вас есть полномочия нажимать все ключи и указывать каждому из них открывать правильную дверь