【问题标题】:Pygame display's a black screenPygame显示黑屏
【发布时间】:2021-08-31 02:53:18
【问题描述】:

我做了一些研究,看看我是否可以通过这种方式解决问题,但似乎没有找到任何东西可以解决我的问题。我找到了这两个:Why isn't my pygame display displaying anything? 和 Confused at why PyGame display's a black screen。我试图用 cmets 中的建议解决我的问题,但没有奏效,或者问题的原因与我的不同。

当我运行代码时,pygame 窗口显示,但只是完全黑色,但没有调用错误。

这里是代码(可能有点长)。

import pygame
import time
import random

pygame.init()

display_width = 700
display_height = 900

player_width = 140
player_height = 100

gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('Baby shower')
clock = pygame.time.Clock()

greenkidimg = pygame.image.load('kid green.png')
bluekidimg = pygame.image.load('kid blue.png')
redkidimg = pygame.image.load('kid red.png')
catcherimg = pygame.image.load('catcher.png')
background = pygame.image.load('background.png')
#image loads

def player(x,y):
    gameDisplay.blit(catcherimg,(x,y))

def bluekid(bluex, bluey, bluew, blueh):
    gameDisplay.blit(bluekidimg, (bluex, bluey))

def redkid(redx, redy, redw, redh):
    gameDisplay.blit(redkidimg, (redx,redy))

def greenkid(greenx, greeny, greenw, greenh):
    gameDisplay.blit(greenkidimg(greenx, greeny))

def game_loop():

    x = (display_width*0.45)
    y = (display_height*0.8)

    x_change = 0

    blue_width = 66
    bluex_start = random.randrange (0, display_width-blue_width)
    bluey_start = -600
    blue_speed = 15
    blue_height = 78
    green_width = 66
    greenx_start = random.randrange (0, display_width-green_width)
    greeny_start = -600
    green_speed = 15
    green_height = 78
    red_width = 66
    redx_start =  random.randrange (0, display_width-red_width)
    redy_start = -600
    red_speed = 15
    red_heigth = 78
    #greenkid,redkid,bluekid-start,speed,h/w

    gameExit = False

    while not gameExit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.KEYDOWN:
                if event.type == pygame.K_LEFT:
                    x_change = -20

                elif event.type == pygame.K_RIGHT:
                    x_change = 20

            if event.type == pygame.KEYUP:
                if event.type == pygame.K_LEFT or pygame.K_RIGHT:
                    x_change = 0

    x += x_change

    gameDisplay.blit(background(0,0))
    player(x,y)
    bluekid(bluex, bluey, bluew, blueh)
    redkid(redx, redy, redw, redh)
    greenkid(greenx, greeny, greenw, greenh)
    #display

    pygame.display.update()
    clock.tick(30)

game_loop()
pygame.quit()
quit()

【问题讨论】:

  • 看起来你的渲染代码实际上并不在你的游戏循环中,检查你的缩进。 (编辑:它在游戏循环方法中,但不在while循环中)
  • 天哪,我已经盯着那部分代码看了 2 个小时,并没有注意到它,非常感谢@AndyM!
  • np - 我将作为答案发布

标签: python pygame


【解决方案1】:

游戏循环中的渲染逻辑只需要缩进到它里面就是while循环的一部分,像这样:

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        if event.type == pygame.KEYDOWN:
            if event.type == pygame.K_LEFT:
                x_change = -20

            elif event.type == pygame.K_RIGHT:
                x_change = 20

        if event.type == pygame.KEYUP:
            if event.type == pygame.K_LEFT or pygame.K_RIGHT:
                x_change = 0

    x += x_change

    gameDisplay.blit(background(0,0))
    player(x,y)
    bluekid(bluex, bluey, bluew, blueh)
    redkid(redx, redy, redw, redh)
    greenkid(greenx, greeny, greenw, greenh)
    pygame.display.update()
    clock.tick(30)

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多