Ответы пользователя по тегу pygame
  • Pygame как вывести катаканский алфавит?

    @DollaR84
    pygame.font.SysFont используется для системных шрифтов.
    Если у вас файл с не системным шрифтом, попробуйте:
    pygame.font.Font('MS Mincho.ttf', size)
    где первый параметр файл со шрифтом.
    Ответ написан
  • Как отслеживать играет ли мелодия в pygame в настоящий момент?

    @DollaR84
    Предполагаю, что вам необходимо отследить момент завершения воспроизведения мелодии.
    В таком случае лучше использовать пользовательские события.
    Например.
    В части кода где происходит первичная инициализация:
    pygame.mixer.init()
    STOPPED_PLAYING = pygame.USEREVENT + 1
    pygame.mixer.music.set_endevent(STOPPED_PLAYING)

    Тут инициализируеться пользовательское событие STOPPED_PLAYING и устанавливается в миксер pygame.
    Затем в цикле обработки событий необходимо добавить следующее:
    for event in pygame.event.get():
        if STOPPED_PLAYING == event.type:
            # код для выполнения при окончании воспроизведения музыки
            # например выбор и начало воспроизведения следующей мелодии
    Ответ написан
  • Как заполнить фигуру в pygame?

    @DollaR84
    В pygame при рисовании различных фигур заливка определяется в зависимости от наличия параметра ширины линии.
    То есть, в вашем случае:
    py.draw.circle(sc,Black,i.pos,7)
    последний параметр 7 указывает ширину линии, поэтому заливка не происходит.
    Если этот параметр убрать, то весь круг зальется черным цветом.
    Если надо определить и заливку и цвет контура разными цветами, то необходимо нарисовать фигуру дважды, сначала с заливкой, а потом линией контура. Например так:
    py.draw.circle(sc,Green,i.pos)
    py.draw.circle(sc,Red,i.pos,7)

    В таком случае получится круг залитый зеленным цветом, и красным контуром.
    Ответ написан
  • Почему не работает код?

    @DollaR84
    Не работает, потому что во втором условии вы клавишу пытаетесь проверить с типом события:
    if event.type == pg.K_UP:

    а надо проверять с нажатой клавишей:
    if event.key == pg.K_UP:
    Ответ написан
  • Как засечь время в python?

    @DollaR84
    Думаю тут хорошо подойдут методы по работе со временем самого pygame:
    pygame.time

    Для вашей задачи существуют 2 способа.
    Приведу небольшие примеры на срабатывание каждые 5 секунд, чтобы было понятнее как легко масштабировать на любое время.
    1 способ. Использовать таймер.
    # при выстреле ставим запрет на следующий выстрел
    self.timer = 0 # обнуляем начальное значение для отсчета
    pygame.time.set_timer(pygame.USEREVENT, 1000) # запускаем таймер (в милисекундах) на срабатывание каждую секунду
    затем в обработчике событий:
    for event in pygame.event.get():
        if event.type == pygame.USEREVENT:
            self.timer += 1 # считаем количество пройденных секунд
            if self.timer == 5: # если прошло 5 секунд
                pygame.time.set_timer(pygame.USEREVENT, 0) # отключаем таймер
                # даем разрешение на следующий выстрел


    2 способ. Использовать тики для отсчета времени.
    # при выстреле ставим запрет на следующий выстрел
    self.start_ticks = pygame.time.get_ticks() # запоминаем начальное значение тиков в милисекундах
    затем в обработчике событий:
    for event in pygame.event.get():
        if event.type == ...: # тут какое-то ваше событие на выстрел
            seconds= (pygame.time.get_ticks() - self.start_ticks)/1000 # вычисляем сколько прошло секунд
            if seconds > 5: # проверяем что прошло 5 секунд
                # даем разрешение на следующий выстрел
    Ответ написан
  • AttributeError: module 'pygame' has no attribute 'display' Что делать?

    @DollaR84
    перед работой с какими-либо объектами pygame, сначала надо его инициализировать:

    pygame.init()
    Ответ написан
  • Pygame. Как сделать округлые углы у прямоугольника?

    @DollaR84
    можно ли рамки и заливку прямоугольника сделать разными цветами, если да, то как?

    Тут все просто, конструктор прямоугольника имеет вид:
    pygame.draw.rect(surface, color, (x1, y1, size_x, size_y), width)
    То, что вас интересует, кроется в последнем параметре width.
    Если он задан то рисуется рамка прямоугольника заданной ширины, если его не задать, то рисуется прямоугольник с заливкой.
    Например, чтобы нарисовать прямоугольник, у которого рамка и заливка будут разных цветов, надо нарисовать два прямоугольника:
    pygame.draw.rect(surface, color1, (x1, y1, size_x, size_y))
    pygame.draw.rect(surface, color2, (x1, y1, size_x, size_y), width)


    С закругленными углами сложнее.
    Думаю там нужна работа с масками.
    Ответ написан
  • Почему не появляется текст на экране pygame?

    @DollaR84
    Проблема в инициализации.
    Для конструктора pygame.font.Font надо передавать имя файла шрифта.
    Если же вы хотите использовать системные шрифты, то надо использовать другой конструктор. Пример:
    f1 = pygame.font.SysFont('arial', 36)
    В данном случае я указал шрифт Arial, можете указать любой присутствующий в вашей системе.
    Ну и конечно вначале у вас должна быть инициализация системы шрифтов:
    pygame.font.init()
    Ответ написан