Adalee
Adalee

Reputation: 538

Pygame screen flickering

I am quite new to Python and currently trying to make my first game with Pygame. I just started and got a problem. My screen is flickering white (fill colour) to black. I tried to lower the tick (even to 1), but it didn't help (actually, it was flickering less, but still visible a lot). I tried to find any help online, but everywhere "display.update / flip used more than once per cycle" was suggested as a problem and it didn't fix mine.

I am currently running a Fedora 20 box, with Nvidia graphic card (and nouveau drivers), if the issue is connected with this.

My code:

import pygame
from pygame.locals import *

class visualisation(object):
   def __init__(self):
      pygame.init()

      pygame.time.Clock().tick()

      self.window = pygame.display.set_mode((0, 0), pygame.FULLSCREEN, 0)
      pygame.mouse.set_visible(False)
      pygame.display.set_caption('MY GAME')

      self.background = pygame.Surface(self.window.get_size())
      self.background = self.background.convert()
      self.background.fill((250, 250, 250))

      self.window.blit(self.background, (0, 0))
      pygame.display.update()


if __name__ == '__main__':
   running = True
   while(running):
      arcade = visualisation()

      for event in pygame.event.get():
          if event.type == KEYDOWN:
              if event.key == K_ESCAPE:
                  running = False

  pygame.quit()

Thanks a lot in advance :)

Upvotes: 0

Views: 1763

Answers (1)

Bartlomiej Lewandowski
Bartlomiej Lewandowski

Reputation: 11170

You are calling the following functions in a loop:

pygame.init()
pygame.display.set_mode((0, 0), pygame.FULLSCREEN, 0)

If I am not mistaken this creates a new screen variable which is very bad. You probably wanted to create a new arcade at the start of the game, instead of on each frame.

Try moving it before the loop:

running = True      
arcade = visualisation()

while(running):
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False

Upvotes: 1

Related Questions