pygame не будет мигать внутри функции?

У меня есть блок кода, который работал вне функции, но не внутри.

Я также убедился, что необходимые переменные были глобальными.

Я могу получить ширину поверхности с помощью chair.get_width() внутри функции, и она работает нормально, но по какой-то причине я не могу выполнить screen.blit(chair, (10,10)). Я не получаю ошибки, просто ничего не делает ...

Вот мой сценарий (он создает окно, затем каждые 100 миллисекунд вызывает функцию, которая получает позицию мыши, поворачивает изображение на x градусов, а затем переносит (или должен мигать) изображение в окно):

    cif = "images/chair3.png"

    import pygame, sys
    from pygame.locals import *

    pygame.init()

    screen = pygame.display.set_mode((640,480),0,32)

    chair = pygame.image.load(cif).convert_alpha()

    pygame.time.set_timer(USEREVENT + 1, 100)

    def cursor(speed):
        global i
        global chair
                    global screen
        x,y = pygame.mouse.get_pos()
        x -= chair.get_width()/2
        y -= chair.get_height()/2

        if i < 360:
            i = i + 360/(1000/speed)
        else:
            i = 0

        orig_chair_rect = chair.get_rect()
        chair1 = pygame.transform.rotate(chair, i);
        rot_chair_rect = orig_chair_rect.copy()
        rot_chair_rect.center = chair1.get_rect().center
        chair1 = chair1.subsurface(rot_chair_rect).copy()

        print chair.get_width()

        screen.blit(chair1,(x,y))

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == USEREVENT + 1:
                cursor(50)

person maxhud    schedule 27.03.2012    source источник
comment
... как вызывается функция?   -  person SamB    schedule 27.03.2012
comment
он вызывается с помощью обработчика событий внутри основного цикла while.   -  person maxhud    schedule 27.03.2012


Ответы (2)


Вам действительно нужно использовать pygame.display.flip() или pygame.display.update(), экран никогда не обновится, если вы этого не сделаете, и, следовательно, ваш стул не будет мигать на экран.

Пробовал, работает. Если это не сработает, переустановите Pygame и попробуйте еще раз.

person beary605    schedule 31.03.2012

Вам нужно вызвать pygame.display.flip() в конце вашей функции - иначе ваш рисунок никогда не будет скопирован из резервного буфера на отображение в реальном времени.

person Community    schedule 27.03.2012
comment
хм, похоже, ничего не сделал: / зачем мне это делать? Мне не нужно этого делать, когда я использую screen.blit () внутри цикла while. просто когда я использую его в функции .. - person maxhud; 27.03.2012