2015-01-13 6 views
0

Я новичок в pygame, и я ожидал, что дисплей будет голубым, а прямоугольник будет нарисован. Окно появляется, но не в голубом и без прямоугольника?Pygame программа не может нарисовать, как ожидалось

Я считаю, что это имеет какое-то отношение к порядку или интервалу. Все работало до того, как я добавил прямоугольник.

import pygame 
import sys 
from pygame.locals import * 

pygame.init() 

cyan = (0,255,255) 
soft_pink = (255,192,203) 

screen_width = 800 
screen_height = 600 

gameDisplay = pygame.display.set_mode((screen_width, screen_height)) 
pygame.display.set_caption('''example''') 

pygame.draw.rect(gameDisplay,soft_pink,(389,200),(300,70),4) 

gameDisplay.fill(cyan) 

gameExit = True 

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

ответ

3

Вы должны быть очень осторожны с вашим форматированием для кода Python. Тестирование кода и подправить форматирование для цикла в то время как показывает проблему:

C:\src\python\pygame1>python buggy.py 
Traceback (most recent call last): 
    File "buggy.py", line 16, in <module> 
    pygame.draw.rect(gameDisplay,soft_pink,(389,200),(300,70),4) 
TypeError: function takes at most 4 arguments (5 given) 

Если вы просто замените pygame.draw.rect вызов с правильным числом параметров она показывает окно голубого цвета. Я тестировал следующую замену строку:

pygame.draw.rect(gameDisplay,soft_pink,(389,200,300,70)) 
0

При инициализации экрана Pygame, поверхность возвращается которую вы можете заполнить и должны постоянно заполнить ваш цикл. Я предлагаю вам использовать поверхностный объект для прямоугольника. Просто измените свой код так:

import pygame 
import sys 
from pygame.locals import * 

pygame.init() 

cyan = (0,255,255) 
soft_pink = (255,192,203) 

screen_width = 800 
screen_height = 600 

gameDisplay = pygame.display.set_mode((screen_width, screen_height)) 
pygame.display.set_caption('Example') # shouldn't use triple quotes 

gameExit = True 

surf = pygame.Surface((200, 75)) # takes tuple of width and height 
rect = surf.get_rect() 
rect.center = (400, 300) 

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
    pygame.display.update() 
    gameDisplay.fill(cyan) # continuously paint screen cyan 
    surf.fill(soft_pink) # continuously paint rectangle 
    gameDisplay.blit(surf, rect) # position rectangle at position 

Помните непрерывный рендеринг основной секрет разработки игр, а также объекты окрашены в указанном порядке. Таким образом, в этом случае вы видите прямоугольник, потому что он покрашен после экрана.

Смежные вопросы