Pygame не будет блистать внутри функции? - PullRequest
1 голос
/ 27 марта 2012

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

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

Я могу получить ширину поверхностииспользуя 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)

Ответы [ 2 ]

5 голосов
/ 31 марта 2012

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

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

1 голос
/ 27 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...