как сделать поле ввода в pygame

How can I create a text input box with Pygame?

I want to get some text input from the user in Python and display what they are typing in a text box, and when they press enter, it gets stored in a string.

I’ve looked everywhere, but I just can’t find anything. I’m using Pygame.

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

5 Answers 5

Here’s an object-oriented variant that allows you to easily create multiple input boxes:

There are also third party modules available like pygame_textinput.

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

Use the KEYDOWN event to get the input from the keyboard (see pygame.event ). The key that was pressed can be obtained from the key attribute of the pygame.event.Event object. unicode contains a single character string that is the fully translated character. Add the character to the text when a key is pressed.
Two special keys need to be dealt with. If RETURN is pressed, the input is finished. If BACKSPACE is pressed, the last character of the input text must be removed:

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

Use the algorithm in a pygame.sprite.Sprite class. Handle the event in the update method.Determine whether the mouse clicks in the text entry field with collidepoint (see How to detect when a rectangular object, image or sprite is clicked) and activate the text input box:

Pass the list of events to the update method of the Group that contains the Sprite:

Источник

Создание игр на Python 3 и Pygame: Часть 2

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

Класс TextObject

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

Создание основного окна

Игры на Pygame выполняются в окнах. Можно даже сделать так, чтобы они выполнялись в полноэкранном режиме. Сейчас я расскажу, как отобразить пустое окно Pygame. Вы увидите многие элементы, которые мы обсуждали ранее. Сначала вызывается init() Pygame, а затем создаются основная поверхность рисования и таймер.

Затем выполняется основной цикл, который постоянно заполняет экран однотонным серым цветом и вызывает метод таймера tick() с частотой кадров.

Использование фонового изображения

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

Отрисовка фигур

Pygame может рисовать всё, что угодно. В модуле pygame.draw есть функции для отрисовки следующих фигур:

Отрисовка кирпичей

Стоит заметить, что класс Brick является подклассом GameObject и получает все его свойства, но также имеет и цвет, который обрабатывает самостоятельно (потому что могут существовать игровые объекты, имеющие несколько цветов). Поле special_effect мы пока рассматривать не будем.

Отрисовка мяча

Отрисовка ракетки

Ракетка — это ещё один прямоугольник, двигающийся влево и вправо в ответ на нажатия игроком клавиш со стрелками. Это значит, что положение ракетки в разных кадрах может отличаться, но в процессе отрисовки это просто прямоугольник, который должен рендериться в текущей позиции, какой бы она ни была. Вот как выглядит соответствующий код:

Заключение

В этой части мы узнали о классе TextObject и о том, как рендерить текст на экране. Также мы познакомились с тем, как рисовать объекты: кирпичи, мяч и ракетку.

В третьей части мы узнаем, как работает обработка событий и как Pygame позволяет нам перехватывать события и реагировать на них (нажатия клавиш, движение мыши и нажатия кнопок мыши). Также мы рассмотрим такие элементы игрового процесса, как движение мяча, задание его скорости и перемещение ракетки.

Источник

Как сделать поле ввода в pygame

Pygame Text Input Module

This module provides two utility classes that simplify entering text using pygame. The classes are:

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

Simplest way is using pypi:

The easiest way is to TextInputVisualizer without any arguments. Then, feed all pygame events to its update method every frame, and blit it’s surface property to the screen. Here’s a minimal example:

Notes on the newer version:

ArgumentDescription
managerThe TextInputManager used to manage the input
font_objectThe pygame.font.Font object used for rendering
antialiaswhether to render the font antialiased or not
font_colorcolor of font rendered
cursor_blink_intervalThe interval of the cursor blinking, in ms
cursor_widthThe width of the cursor, in pixels
cursor_colorThe color of the cursor

If you prefer to draw the text on the screen yourself, you can use TextInputManager to only manage the string that has been typed so far.

So say you want to only allow input to up to 5 letters, you could do that with

FieldDescription
valueThe inserted value so far. When change, cursor_pos is kept as far as possible.
cursor_posThe position of the cursor. 0 is before the first character, len(manager.value) the position after the last. Values outside this range are clamped.

Here’s an example that shows most features:

About

a small module that enables you to input text with your keyboard using pygame

Источник

Как получить ввод с клавиатуры в Pygame?

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

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

6 ответов

вы можете получить события из pygame, а затем следить за KEYDOWN событие, вместо того чтобы смотреть на ключи, возвращенные get_pressed() (что дает вам клавиши, которые в настоящее время нажаты, тогда как KEYDOWN событие показывает, какие клавиши были нажаты на раму).

что происходит с вашим кодом прямо сейчас, так это то, что если ваша игра рендеринга на 30fps, и вы удерживаете клавишу со стрелкой влево в течение половины секунды, вы обновляете местоположение 15 раз.

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

тогда где-то во время игрового цикла вы бы сделали что-то вроде этого:

это позволит вам двигаться только один раз каждые 10 кадров (так что если вы двигаетесь, тикер получает установите значение 10, и после 10 кадров он позволит вам двигаться снова)

обратите внимание, что k_0 и K_1-не единственные ключи, чтобы увидеть их все, см. документацию pygame, иначе нажмите tab после ввода в

Это будет означать, что вы двигаетесь только 1/10 времени. Если он все еще движется быстро, вы можете попробовать увеличить значение, которое вы установили «count».

просто fyi, если вы пытаетесь убедиться, что корабль не уходит с экрана с

вы, вероятно, можете лучше использовать

вы должны использовать clock.tick(10) Как говорится в docs.

все ответы выше слишком сложны, я бы просто изменил переменные на 0.1 вместо 1 это делает корабль в 10 раз медленнее если это все еще слишком быстрые изменения переменных 0.01 это делает корабль в 100 раз медленнее попробуйте это

Источник

PyGame — шпаргалка для использования

как сделать поле ввода в pygame. Смотреть фото как сделать поле ввода в pygame. Смотреть картинку как сделать поле ввода в pygame. Картинка про как сделать поле ввода в pygame. Фото как сделать поле ввода в pygame

Основные модули пакета Pygame

МодульНазначение
pygame.cdromДоступ к CD-приводам и управление ими
pygame.cursorsЗагружает изображения курсора
pygame.displayДоступ к дисплею
pygame.drawРисует фигуры, линии и точки
pygame.eventУправление внешними событиями
pygame.fontИспользует системные шрифты
pygame.imageЗагружает и сохраняет изображение
pygame.joystickИспользует джойстики и аналогичные устройства
pygame.keyСчитывает нажатия клавиш с клавиатуры
pygame.mixerЗагружает и воспроизводит мелодии
pygame.mouseУправляет мышью
pygame.movieВоспроизведение видеофайлов
pygame.musicРаботает с музыкой и потоковым аудио
pygame.overlayДоступ к расширенным видеоизображениям
pygameСодержит функции Pygame высокого уровня
pygame.rectУправляет прямоугольными областями
pygame.sndarrayМанипулирует звуковыми данными
pygame.spriteУправление движущимися изображениями
pygame.surfaceУправляет изображениями и экраном
pygame.surfarrayМанипулирует данными пикселей изображения
pygame.timeмодуль pygame для управления временем и частотой кадров
pygame.transformИзменение размера и перемещение изображений

Окно Pygame

Цикл игры, выход из игры

Рисование базовых элементов
модуль pygame.draw

pygame.draw.rectнарисовать прямоугольную форму
pygame.draw.polygonфигуру с любым количеством сторон
pygame.draw.circleкруг вокруг точки
pygame.draw.ellipseнарисовать круглую форму внутри прямоугольника
pygame.draw.arcнарисовать секцию эллипса
pygame.draw.lineнарисовать сегмент прямой линии
pygame.draw.linesдля рисования нескольких смежных отрезков
pygame.draw.aalineрисовать тонкую линию
pygame.draw.aalinesнарисовать связанную последовательность сглаженных линий

Загрузка изображения

Объект Rect

pygame.Rect

Pygame использует объекты Rect для хранения и манипулирования прямоугольными областями. Rect может быть создан из комбинации значений слева, сверху, ширины и высоты. Rect также могут быть созданы из объектов python, которые уже являются Rect или имеют атрибут с именем «rect».

Методы работы с Rect

pygame.Rect.copyВозвращает новый прямоугольник, имеющий ту же позицию и размер, что и оригинал.
pygame.Rect.moveВозвращает новый прямоугольник, перемещаемый данным смещением. Аргументы x и y могут быть любым целочисленным значением, положительным или отрицательным.
pygame.Rect.move_ipТо же, что и метод Rect.move (), но работает на месте.
pygame.Rect.inflateувеличивать или уменьшать размер прямоугольника, на месте
pygame.Rect.inflate_ipувеличивать или уменьшать размер прямоугольника, на месте
pygame.Rect.clampперемещает прямоугольник внутри другого
pygame.Rect.clamp_ipперемещает прямоугольник внутри другого, на месте
pygame.Rect.clipобрезает прямоугольник внутри другого
pygame.Rect.unionсоединяет два прямоугольника в один
pygame.Rect.union_ipсоединяет два прямоугольника в один, на месте
pygame.Rect.unionallобъединение многих прямоугольников
pygame.Rect.unionall_ipобъединение многих прямоугольников, на месте
pygame.Rect.fitизменить размер и переместить прямоугольник учмиывая соотношение сторон
pygame.Rect.normalizeкорректировать отрицательные размеры
pygame.Rect.containsпроверить, находится ли один прямоугольник внутри другого
pygame.Rect.collidepointпроверить, находится ли точка внутри прямоугольника
pygame.Rect.colliderectтест, пересекаются ли два прямоугольника
pygame.Rect.collidelistпроверить, пересекается ли хоть один прямоугольник в списке
pygame.Rect.collidelistallпересекаются ли все прямоугольники в списке
pygame.Rect.collidedictпроверить, если один прямоугольник в словаре пересекается
pygame.Rect.collidedictallпересекаются ли все прямоугольники в словаре

Обработка событий

Событие — это то, как Pygame сообщает о том, что что-то случилось за пределами кода программы. События создаются, например, при нажатии клавиш клавиатуры, мыши и размещаются в очереди, дожидаясь обработки.

Функция get в модуле pygame.event возвращает последнее событие, ожидающее в очереди и удаляет его из очереди.

Объект event

Модуль pygame.event для обработки очереди событий

pygame.event.pumpЕсли вы не используете другие функции событий в своей игре, вы должны вызвать pygame.event.pump (), чтобы позволить pygame обрабатывать внутренние действия
pygame.event.getполучает события из очереди
pygame.event.pollполучить одно событие из очереди
pygame.event.waitждёт одиночного события из очереди
pygame.event.peekпроверить, ждут ли очереди события определённого типа
pygame.event.clearудалить все события из очереди
pygame.event.event_nameвозвращает имя для типа события. Строка находится в стиле WordCap
pygame.event.set_blockedпроверяет, какие события не разрешены в очереди
pygame.event.set_allowedпроверяет, какие события разрешены в очереди
pygame.event.get_blockedпроверить, заблокирован ли тип события из очереди
pygame.event.set_grabпроверяет совместное использование устройств ввода с другими приложениями
pygame.event.get_grabпроверить, работает ли программа на устройствах ввода данных
pygame.event.postпоместить новое событие в очередь
pygame.event.Eventсоздать новый объект события
pygame.event.EventTypeОбъект Python, представляющий событие SDL. Экземпляры пользовательских событий создаются с вызовом функции Event. Тип EventType не может быть напрямую вызван. Экземпляры EventType поддерживают назначение и удаление атрибутов.

Pygame отслеживает все сообщения о событиях через очередь событий. Процедуры в этом модуле помогают управлять этой очередью событий. Входная очередь сильно зависит от модуля отображения (display) pygame. Если дисплей не был инициализирован и видеорежим не установлен, очередь событий не будет работать.

Существует множество способов доступа к очереди событий. Просто проверять существование событий, захватывать их непосредственно из стека.

Модуль pygame.mouse для работы с мышью

pygame.mouse.get_pressedполучить состояние кнопок мыши
pygame.mouse.get_posполучить позицию курсора мыши
pygame.mouse.get_relполучить количество движений мыши
pygame.mouse.set_posустановить позицию курсора мыши
pygame.mouse.set_visibleскрыть или показать курсор мыши
pygame.mouse.get_focusedпроверяет, принимает ли дисплей ввод мыши
pygame.mouse.set_cursorустановить изображение для курсора мыши
pygame.mouse.get_cursorполучить изображение для курсора мыши

Функции мыши можно использовать для получения текущего состояния устройства мышь. Эти функции также могут изменять курсор мыши.

Пример. Нарисовать курсор под текущей позицией мыши.

Определить какая кнопка была нажата на мышке можно используя значение event.button:

Пример. Перемещать картинку курсором мыши.

Клавиатура

Модуль pygame.key

Этот модуль содержит функции для работы с клавиатурой.Очередь событий получает события pygame.KEYDOWN и pygame.KEYUP при нажатии и отпускании клавиш клавиатуры.

Оба события имеют ключевой атрибут, который представляет собой целочисленный идентификатор, представляющий каждую клавишу на клавиатуре.Событие pygame.KEYDOWN имеет дополнительные атрибуты: unicode и scancode. unicode представляет собой одну символьную строку, которая соответствует введённому символу. Scancode представляет собой код для конкретной платформы.

Получить код клавиши:

Существует много клавиатурных констант, они используются для представления клавиш на клавиатуре. Ниже приведен список всех клавиатурных констант:

KeyASCIIASCIICommonName
K_BACKSPACE\bbackspace
K_TAB\ttab
K_CLEARclear
K_RETURN\rreturn
K_PAUSEpause
K_ESCAPE^[escape
K_SPACEspace
K_EXCLAIM!exclaim
K_QUOTEDBL«quotedbl
K_HASH#hash
K_DOLLAR$dollar
K_AMPERSAND&ampersand
K_QUOTEquote
K_LEFTPAREN(leftparenthesis
K_RIGHTPAREN)rightparenthesis
K_ASTERISK*asterisk
K_PLUS+plussign
K_COMMA,comma
K_MINUSminussign
K_PERIOD.period
K_SLASH/forwardslash
K_000
K_111
K_222
K_333
K_444
K_555
K_666
K_777
K_888
K_999
K_COLON:colon
K_SEMICOLON;semicolon
K_LESSless-thansign
K_EQUALS=equalssign
K_GREATER>greater-thansign
K_QUESTION?questionmark
K_AT@at
K_LEFTBRACKET[leftbracket
K_BACKSLASH\backslash
K_RIGHTBRACKET]rightbracket
K_CARET^caret
K_UNDERSCORE_underscore
K_BACKQUOTE`grave
K_aaa
K_bbb
K_ccc
K_ddd
K_eee
K_fff
K_ggg
K_hhh
K_iii
K_jjj
K_kkk
K_lll
K_mmm
K_nnn
K_ooo
K_ppp
K_qqq
K_rrr
K_sss
K_ttt
K_uuu
K_vvv
K_www
K_xxx
K_yyy
K_zzz
K_DELETEdelete
K_KP0keypad0
K_KP1keypad1
K_KP2keypad2
K_KP3keypad3
K_KP4keypad4
K_KP5keypad5
K_KP6keypad6
K_KP7keypad7
K_KP8keypad8
K_KP9keypad9
K_KP_PERIOD.keypadperiod
K_KP_DIVIDE/keypaddivide
K_KP_MULTIPLY*keypadmultiply
K_KP_MINUSkeypadminus
K_KP_PLUS+keypadplus
K_KP_ENTER\rkeypadenter
K_KP_EQUALS=keypadequals
K_UPuparrow
K_DOWNdownarrow
K_RIGHTrightarrow
K_LEFTleftarrow
K_INSERTinsert
K_HOMEhome
K_ENDend
K_PAGEUPpageup
K_PAGEDOWNpagedown
K_F1F1
K_F2F2
K_F3F3
K_F4F4
K_F5F5
K_F6F6
K_F7F7
K_F8F8
K_F9F9
K_F10F10
K_F11F11
K_F12F12
K_F13F13
K_F14F14
K_F15F15
K_NUMLOCKnumlock
K_CAPSLOCKcapslock
K_SCROLLOCKscrollock
K_RSHIFTrightshift
K_LSHIFTleftshift
K_RCTRLrightcontrol
K_LCTRLleftcontrol
K_RALTrightalt
K_LALTleftalt
K_RMETArightmeta
K_LMETAleftmeta
K_LSUPERleftWindowskey
K_RSUPERrightWindowskey
K_MODEmodeshift
K_HELPhelp
K_PRINTprintscreen
K_SYSREQsysrq
K_BREAKbreak
K_MENUmenu
K_POWERpower
K_EUROEuro

Направленное движение с помощью клавиш

Можно перемещать изображение на экране с клавиатуры, назначая клавиши для перемещений: вверх, вниз, влево, вправо.

Создать картинку, например:

Проверить очередь событий:

Проверить, является ли полученное событие нажатием на клавиши со стрелками:

Если — да, то получмить код нажатой клавиши и сформировать новые координаты для картинки:

И нарисовать картинку в новом месте:

Объект Surface

pygame.Surface — объект pygame для представления изображений

Наложение поверхностей, прозрачность.

Управление временем

Модуль pygame.time содержит объект Clock, который можно использовать для отслеживания
времени. Чтобы создать объект типа: время, вызывается конструктор pygame.time.Clock:
clock = pygame.time.Clock()

Когда создан объект clock, можно вызвать его функцию tick один раз за кадр,
которая возвращает время, прошедшее со времени предыдущего вызова в миллисекундах:
time_passed = clock.tick ()

Функция tick может использовать необязательный параметр для установления максимальной частоты кадров. Этот параметр нужен, если игра запущена на рабочем компьютере и необходимо контролировать, чтобы она не использовала всю его вычислительная мощность на 100%:

# Игра будет работать со скоростью не более 30 кадров в секунду

time_passed = clock.tick (30)

Звуки

Загружаем звуковой файл в формате *.wav

sound = pygame.mixer.Sound(«sound.wav»)
(загружаем до игрового цикла, т.к. это очень долгая операция)

Столкновения (collisions)

При написании игр часто возникает необходимость проверять взаимное расположение объектов на экране, отслеживать моменты их столкновений, пересечений.

Эта задача может быть реализована разными способами.

Например, используя объект Rect

Или используя поверхности — surface

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *