2014-11-21 215 views
0

我目前正在通過使用Python開發遊戲開發工具和Pygame書以及從書中複製的代碼無法正常運行。黑色pygame窗口屏幕出現。任何人都可以指出我的代碼中的錯誤或錯誤?爲什麼Pygame在運行我的代碼時顯示黑屏?

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

您可以使用正確的縮進格式重新格式化您的代碼嗎? – vikramls 2014-11-21 19:26:54

+0

對不起。我已經做了。 – CodeGakusei224 2014-11-21 19:35:56

回答

1

第一for循環似乎後return是罪魁禍首。你可以評論一下,然後再試一次嗎?

下面的代碼應該是什麼樣子,我認爲:

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

我有評論呼籲行的main(),因爲我不認爲他們需要爲您的代碼工作要做。

+0

當我省略它並運行我的代碼時,我收到了這個錯誤。 RuntimeError:超過最大遞歸深度 – CodeGakusei224 2014-11-21 19:49:36

+0

我認爲您的縮進仍然不正確。代碼中的「return」指示create_scales函數的結束。我已經用我認爲代碼應該看起來像的更新了我的答案。 – vikramls 2014-11-21 21:28:00

+0

謝謝。你的代碼工作。 – CodeGakusei224 2014-11-21 23:06:36