简体   繁体   English

为什么在运行我的代码时Pygame会显示黑屏?

[英]Why Does Pygame Display A Black Screen When Running My Code?

I'm currently working through my Beggining Game Development With Python And Pygame book and the code that I copied from the book won't run properly. 我目前正在研究《使用Python和Pygame进行入门游戏开发》一书,从该书复制的代码无法正常运行。 A black pygame window screen comes up instead. 而是出现了一个黑色的pygame窗口屏幕。 Can anyone point out the errors or mistakes in my code below? 任何人都可以在下面的代码中指出错误或错误吗?

import pygame  
from pygame.locals import *  
from sys import exit  
pygame.init()

screen = pygame.display.set_mode((640,480),0,32)     

def create_scales(height):  
    red_scale_surface = pygame.surface.Surface((640,height))  
    blue_scale_surface = pygame.surface.Surface((640,height))  
    green_scale_surface = pygame.surface.Surface((640,height))  
    for x in range(640):  
        c = int((x/639.)*255.)  
        red = (c,0,0)  
        green = (0,c,0)  
        blue = (0,0,c)  
        line_rect = Rect(x,0,1,height)  
        pygame.draw.rect(red_scale_surface,red,line_rect)
        pygame.draw.rect(green_scale_surface,green,line_rect)
        pygame.draw.rect(blue_scale_surface,blue,line_rect)  
    return red_scale_surface, green_scale_surface, blue_scale_surface  
    red_scale, green_scale, blue_scale = create_scales(80)

    color = [127,127,127]

    while True:

        for event in pygame.event.get():
            if event.type == QUIT:
                exit()

        screen.fill((0,0,0))

        #Draw the scales to the screen
        screen.blit(red_scale,(0,00))
        screen.blit(green_scale,(0,80))
        screen.blit(blue_scale,(0,160))

        x, y = pygame.mouse.get_pos()

        #If the mouse was pressed on one of the sliders, adjust the color component
        if pygame.mouse.get_pressed()[0]:
            for component in range(3):
                if y > component * 80 and y < (component + 1)* 80:
                    color[component] = int((x/639.)*255.)
                pygame.display.set_caption("PyGame Color Test - "+str(tuple(color)))

       #Draw a circle for each slider to represent the current setting
        for component in range(3):
           pos = (int((color[component]/255.)*639), component*80+40)
           pygame.draw.circle(screen,(255,255,255),pos,20)

        pygame.draw.rect(screen,tuple(color),(0,240,640,240))

        pygame.display.update()

def main():
    create_scales(555)

main()

The return after the first for loop seems to be the culprit. 第一个for循环之后的return似乎是罪魁祸首。 Can you comment it out and try again? 您可以注释掉并重试吗?

Here's how the code should look in my opinion: 我认为代码应如下所示:

import pygame  
from pygame.locals import *  
from sys import exit  
pygame.init()

screen = pygame.display.set_mode((640,480),0,32)     

def create_scales(height):  
    red_scale_surface = pygame.surface.Surface((640,height))  
    blue_scale_surface = pygame.surface.Surface((640,height))  
    green_scale_surface = pygame.surface.Surface((640,height))  
    for x in range(640):  
        c = int((x/639.)*255.)  
        red = (c,0,0)  
        green = (0,c,0)  
        blue = (0,0,c)  
        line_rect = Rect(x,0,1,height)  
        pygame.draw.rect(red_scale_surface,red,line_rect)
        pygame.draw.rect(green_scale_surface,green,line_rect)
        pygame.draw.rect(blue_scale_surface,blue,line_rect)  
    return red_scale_surface, green_scale_surface, blue_scale_surface  

red_scale, green_scale, blue_scale = create_scales(80)
color = [127,127,127]

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            exit()

    screen.fill((0,0,0))

    #Draw the scales to the screen
    screen.blit(red_scale,(0,00))
    screen.blit(green_scale,(0,80))
    screen.blit(blue_scale,(0,160))

    x, y = pygame.mouse.get_pos()

    #If the mouse was pressed on one of the sliders, adjust the color component
    if pygame.mouse.get_pressed()[0]:
        for component in range(3):
            if y > component * 80 and y < (component + 1)* 80:
                color[component] = int((x/639.)*255.)
            pygame.display.set_caption("PyGame Color Test - "+str(tuple(color)))

    #Draw a circle for each slider to represent the current setting
    for component in range(3):
        pos = (int((color[component]/255.)*639), component*80+40)
        pygame.draw.circle(screen,(255,255,255),pos,20)

    pygame.draw.rect(screen,tuple(color),(0,240,640,240))
    pygame.display.update()


# def main():
#     create_scales(555)

# main()

I have commented the lines calling main() since I don't think they are needed for your code to work. 我已经注释了调用main()的行,因为我认为您的代码不需要它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM