【问题标题】:Pygame screen flickeringPygame屏幕闪烁
【发布时间】:2014-08-16 01:03:52
【问题描述】:

我对 Python 很陌生,目前正在尝试使用 Pygame 制作我的第一款游戏。我刚开始,遇到了问题。我的屏幕从白色(填充颜色)闪烁到黑色。我试图降低滴答声(甚至降低到 1),但它没有帮助(实际上,它的闪烁较少,但仍然可见很多)。我试图在网上找到任何帮助,但到处都建议“display.update / flip used more than once per cycle”被认为是一个问题,但它并没有解决我的问题。

如果问题与此有关,我目前正在运行带有 Nvidia 显卡(和 nouveau 驱动程序)的 Fedora 20 机器。

我的代码:

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()

提前非常感谢:)

【问题讨论】:

    标签: linux python-2.7 pygame flicker


    【解决方案1】:

    您正在循环调用以下函数:

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

    如果我没记错的话,这会创建一个非常糟糕的新屏幕变量。 您可能想在游戏开始时创建一个新的街机,而不是在每一帧上。

    尝试在循环之前移动它:

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

    【讨论】:

    • 哇,真的解决了!每次我查看代码示例时,它都在循环中。但这实际上是有道理的,我为没有意识到这一点而感到难过,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2015-11-05
    • 2014-11-29
    相关资源
    最近更新 更多