当前位置: 首页 > 知识库问答 >
问题:

当我画一个矩形时,Pygame会显示一个黑屏

葛修永
2023-03-14

我曾尝试从链接中实现snake游戏教程,但在运行该链接后,屏幕立即关闭。py文件。我已经查找了屏幕立即关闭错误,并尝试通过添加运行块来修复它,但现在每当我尝试绘制矩形时,屏幕就会变黑。

import os
os.environ['SDL_AUDIODRIVER'] = 'dsp'
import pygame
import sys
import random
import subprocess

import pygame
pygame.init()


display_width = 500 
display_height = 500    
display = pygame.display.set_mode((display_width,display_height))
window_color= (200,200,200)
red = (255,0,0)  
black = (0,0,0)
apple_image = pygame.image.load('apple.jpg') 
snake_head = [250,250] 
pygame.display.set_caption("Snake AI")
snake_position = [[250,250],[240,250],[230,250]] 
apple_position = [random.randrange(1,50)*10,random.randrange(1,50)*10]

run = True
while run:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            run =False

        if event.type == pygame.KEYDOWN:
            command = "python sample.py"
            subprocess.call(command)

    
    def display_snake(snake_position):
        for position in snake_position:
            pygame.draw.rect(display,red,pygame.Rect(position[0],position[1],10,10))
    

    def display_apple(display,apple_position, apple):
        display.blit(apple,(apple_position[0], apple_position[1]))
    
    pygame.display.update()


pygame.quit()

共有2个答案

单品
2023-03-14

您需要将pygame.quit()命令放在检查事件for循环下。因为它当前所做的是在你的程序中运行,一旦它完成主循环,一旦它退出:

while True: # you don't need a flag here, unless 
            # you have an activation button of

   for event in pygame.event.get():

      if event.type == pygame.QUIT:
          pygame.quit()
          sys.exit()

      if event.type == pygame.KEYDOWN:
          command = "python sample.py"
          subprocess.call(command)

通常,一种可能的做法是将上述所有代码重构为函数,或者在不同的模块中完成它们,并将它们作为对象导入所谓的main。py文件(即此文件,包含主游戏循环)。

锺离珂
2023-03-14

您有display\u apple()display\u snake()的定义,它们的调用应该在哪里。

display\u apple()display\u snake()函数的定义从while循环中取出,并将它们移到顶部某个位置。在以前定义它们的地方,调用它们。你会看到你的蛇和苹果出现在屏幕上。

def display_snake(snake_position):
    for position in snake_position:
        pygame.draw.rect(display,red,pygame.Rect(position[0],position[1],10,10))
    

def display_apple(display,apple_position, apple):
    display.blit(apple,(apple_position[0], apple_position[1]))

run = True
while run:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            run =False

        if event.type == pygame.KEYDOWN:
            command = "python sample.py"
            subprocess.call(command)

    display_apple(display, apple_position, apple_image)
    display_snake(snake_position)
    
    pygame.display.update()

我将定义放在while循环的正上方,这样您就可以看到它们,但是我通常会在pygame之前将它们定义得更高。init()调用将是一个好地方。

您通常希望函数定义和类定义(如果有,但目前没有)与执行的代码分离。

事实上,我更喜欢将执行代码的主体也放在函数中,通常该函数被称为main(),然后只调用该函数。这意味着除了调用函数main()。但是,这样做确实需要您小心全局变量,这会给您带来一些问题。

 类似资料:
  • 我试图让这个游戏工作,但它只是显示一个黑屏。这是一个简单的游戏,你只要避免掉块。我看过相关的问题,但没有一个答案对我有用。它说我必须添加更多细节,所以希望这一行足够了,因为idk在这一行还需要写些什么来为我的文章添加细节。我的代码:

  • 本文向大家介绍使用canvas画出一个矩形相关面试题,主要包含被问及使用canvas画出一个矩形时的应答技巧和注意事项,需要的朋友参考一下

  • 问题内容: 如何绘制具有Alpha颜色的矩形?我有: 但是我希望白色矩形的透明度为50%,但是Alpha值似乎没有起作用。 问题答案: 函数将不使用Alpha绘制。该文件说: 大多数参数接受RGB三元组的color参数。这些也可以接受RGBA四联体。如果Alpha值包含像素Alpha,则它将直接写入Surface,但是draw函数不会透明地绘制。 您可以做的是创建第二个曲面,然后将其调高到屏幕上。

  • 我正在PyGame中制作一个太空入侵者游戏,但当我尝试绘制投射物时,它会覆盖/更改主精灵(平面)。如何解决此问题,以便在屏幕上显示多个精灵?

  • 在上面的图片中,我展示了两个矩形 矩形1,其x可以从-900到13700不等,Y可以从-600到6458 矩形2,其坐标X可以从0到3000变化,而y可以从0到2000变化 同样:矩形2的起点位于左上角位置(0,0),而矩形1的起点位于左上角位置(宽度/2,高度/2)。 我需要做的是:使用缩放或平移将矩形1的点转换为矩形2的点。 那么,为了将矩形1的坐标转换为矩形2的坐标,< code>x和< c

  • 我正在为平台游戏做教程,但我的Pygame窗口显示一个黑屏。 我不知道怎么解决这个问题。 我尝试再次关闭和打开Visual Studio Code,但没有任何结果。