pygame.error: видеосистема не инициализирована, а pygame.get_init () возвращает None - PullRequest
1 голос
/ 19 июня 2020

Заранее прошу прощения за свой плохой английский sh. Итак, чтобы резюмировать проблему, каждый раз, когда я вызываю get_init () в функции процесса, она возвращает None. Как будто он никогда не вызывался, но я вызвал его, просто в другой функции и вне процесса.

Я действительно не могу обойти эту проблему, и это первый раз, когда я публикую в стеке переполнение. Код не завершен, но он должен создать новый «слой» и воспроизвести на нем изображение для анимации (да, я начал использовать pygame только вчера, и да, я не слишком хорош в python, я Я знаю, что мне, вероятно, следует провести больше исследований по многопроцессорности).

Поскольку я перепробовал все, что смог найти на форумах, я решил опубликовать это. Не ища кормления с ложечки или чего-то подобного. Спасибо за внимание.

def pygame_setup():
    pygame.init()
    running = True
    screen = pygame.display.set_mode((image0.shape[1], image0.shape[0]))
    cursor = Pen((200, 0, 0), "cursor.png", screen)
    return screen

class Pen:  # deve eseguire la queue sta roba
    def __init__(self, color, cursor_name, screen):
        self.pos = (0, 0)
        self.name = cursor_name
        self.color = color
        self.down = True
        p = Process(target=self.run, args=(pickable.PickleableSurface(screen),))
        p.start()

    def up(self):
        self.down = False

    def down(self):
        self.down = True

    def run(self, screen):
        cursor = pygame.image.load(self.name)
        # image = pygame.transform.scale(cursor, (int(image0.shape[1] * 0.05), int(image0.shape[0] * 0.05)))
        cursor.fill(self.color, special_flags=pygame.BLEND_MULT)
        surface = pygame.Surface([image0.shape[1], image0.shape[0]], pygame.SRCALPHA)
        surface.fill((180, 0, 0, 0))
        screen.blit(surface, (0, 0))
        prevr = surface.blit(cursor, self.pos)
        while 1:
            pygame.draw.rect(surface, (180, 0, 0, 100), prevr)
            prevr = surface.blit(cursor, self.pos)

            if self.down:
                x, y = self.pos
                surface.fill((180, 0, 0, 0))
                pygame.draw.circle(surface, (255, 255, 255), (x + 5, y + 5), 2)
            pygame.display.flip()

if __name__ == '__main__':
    import pickable
    screen = pygame_setup()
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print("quit")
                pygame.quit()
                running = False

Process Process-1: Traceback (most recent call last):   
  File "C:\Users\fdimo\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 258, in _bootstrap
     self.run()   
  File "C:\Users\fdimo\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 93, in run
     self._target(*self._args, **self._kwargs)
  File "C:\Users\fdimo\OneDrive\Desktop\SCRIPTCALLIGRAFIA\DEPRESSOPYGAME.py", line 64, in run
     pygame.display.flip() 
         pygame.error: video system not initialized
...