【问题标题】:Pygame drawing not showing in Pygame windowPygame 绘图未显示在 Pygame 窗口中
【发布时间】:2019-01-26 04:14:04
【问题描述】:

所以我正在测试 pygame,我想画一个简单的矩形。运行代码时没有错误消息,但矩形未显示在窗口中。我看到的是弹出一个空白的白色 Pygame 窗口。有谁知道为什么? 目前在我的 Mac 上使用 Python3 和 Pygame 1.9.4。 这是我的代码,

import pygame
import pygame.font
pygame.init()

# Colours
BLACK   = (  0,  0,  0)
WHITE   = (255,255,255)
GREEN   = (  0,255,  0)
RED     = (255,  0,  0)
BLUE    = (  0,  0,255)

# Dimensions of screen
size = (400,500)
WIDTH = 500
HEIGHT = 400
screen = pygame.display.set_mode(size)

# Loop Switch
done = False

# Screen Update Speed (FPS)
clock = pygame.time.Clock()

# ------- Main Program Loop -------
while not done:
    # --- Main Event Loop ---
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    pygame.draw.rect(screen,(78,203,245),(0,0,250,500),5)


    screen.fill(GREEN)
    pygame.display.flip()

    #Setting FPS
    clock.tick(60)

#Shutdown
pygame.quit()

【问题讨论】:

  • 所以,你正在绘制一个矩形,然后用绿色填充整个屏幕
  • 是的,但这也没有显示出来。另外,我在没有那条线的情况下尝试了它,但它仍然不起作用:(
  • 我确实得到了一个绿色窗口,这是预期的结果
  • 如果我在填充后移动矩形绘图,矩形也会显示
  • 等什么?你用的是windows还是mac?

标签: python pygame


【解决方案1】:

您不想每 60 个滴答声用绿色填充屏幕

要解决此问题,只需将 screen.fill(GREEN) 放在主循环之外。

您希望 screen.fill 在您的 while 循环中的唯一时间是在您的程序中添加动作时。

我强烈建议您创建一个名为 draw 的函数并在您的 while 循环之外绘制内容。

【讨论】:

    【解决方案2】:

    我发现了问题: 首先,Glitchd 是正确的,但您忘记更新:

    import pygame
    import pygame.font
    pygame.init()
    
    # Colours
    BLACK   = (  0,  0,  0)
    WHITE   = (255,255,255)
    GREEN   = (  0,255,  0)
    RED     = (255,  0,  0)
    BLUE    = (  0,  0,255)
    
    # Dimensions of screen
    size = (400,500)
    WIDTH = 500
    HEIGHT = 400
    screen = pygame.display.set_mode(size)
    
    # Loop Switch
    done = False
    
    # Screen Update Speed (FPS)
    clock = pygame.time.Clock()
    
    # ------- Main Program Loop -------
    while not done:
        # --- Main Event Loop ---
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done = True
        screen.fill(GREEN)
        pygame.draw.rect(screen,(78,203,245),(0,0,250,500),5)
    
    
        pygame.display.flip()
        pygame.display.update()
    
        #Setting FPS
        clock.tick(60)
    
    #Shutdown
    pygame.quit()
    

    【讨论】:

      【解决方案3】:

      你正在画一个形状,然后用绿色覆盖它,交换

      pygame.draw.rect(screen,(78,203,245),(0,0,250,500),5)
      screen.fill(GREEN)
      

      周围的那两个

      【讨论】:

        【解决方案4】:

        问题是你绘制了形状,然后用绿色“填充”(覆盖)它,所以试试这样的方法:

            screen.fill(GREEN) #first fill the screen with green
            pygame.draw.rect(screen,(78,203,245),(0,0,250,500),5) #and after that draw the rectangle
        

        【讨论】:

          【解决方案5】:

          错误很明显,因为首先您要绘制一个形状,然后用 color 覆盖它。您的代码是正确的,但需要重新排列。

          screen.fill("your color") # 首先你应该用颜色填充屏幕

          pygame.draw.rect(screen,(78,203,245),(0,0,250,500),5) # 然后你应该画任何形状

          【讨论】:

          • 您好,感谢您的帮助。作为建议,请在您的帖子中使用代码格式,这有助于更轻松地阅读答案。
          【解决方案6】:

          之前给出的每个答案都未能正确说明为什么会出现此问题。它与绘制、填充操作的顺序无关;这是关于你调用pygame.display.flip 函数的时间,或者很快:更新屏幕。您的代码绘制一个矩形,用绿色填充屏幕,然后更新屏幕。它应该做的是绘制矩形,更新屏幕,然后用绿色填充屏幕。这样在屏幕被绿色填充之前绘制矩形后屏幕会更新,因此您可以看到它:

          import pygame
          import pygame.font
          pygame.init()
          
          # Colours
          BLACK   = (  0,  0,  0)
          WHITE   = (255,255,255)
          GREEN   = (  0,255,  0)
          RED     = (255,  0,  0)
          BLUE    = (  0,  0,255)
          
          # Dimensions of screen
          size = (400,500)
          WIDTH = 500
          HEIGHT = 400
          screen = pygame.display.set_mode(size)
          
          # Loop Switch
          done = False
          
          # Screen Update Speed (FPS)
          clock = pygame.time.Clock()
          
          # ------- Main Program Loop -------
          while not done:
              # --- Main Event Loop ---
              for event in pygame.event.get():
                  if event.type == pygame.QUIT:
                      done = True
          
              #In each case you draw the rectangle and then fill the screen with green
          
              pygame.draw.rect(screen,(78,203,245),(0,0,250,500),5)
              pygame.display.flip()
          
              screen.fill(GREEN)
              
          
              #Setting FPS
              clock.tick(60)
          
          #Shutdown
          pygame.quit()
          

          简而言之,您应该在绘制矩形后更新。

          【讨论】:

            【解决方案7】:

            你应该先用绿色覆盖屏幕,然后绘制你的形状,否则它会被覆盖。

            【讨论】:

            • 您好!我看到这个答案已经被提出。重复的答案可能会被否决。
            猜你喜欢
            • 2022-12-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-02
            • 1970-01-01
            相关资源
            最近更新 更多