2014-02-11 86 views
1

這是我的全PROGRAMM(這只是練習):Pygame.font.Font.render有類型錯誤

import pygame 
pygame.init() 
while True: 
    for event in pygame.event.get(): 
     if event.type==pygame.QUIT: 
      pygame.quit() 
      break 
    pygame.font.Font.render('Hello world', 1, (255, 100, 100)) 

和輸出是:

Traceback (most recent call last): 
    File "D:\Download\unim.py", line 8, in <module> 
    pygame.font.Font.render('Hello world', 1, (255, 100, 100)) 
TypeError: descriptor 'render' requires a 'pygame.font.Font' object but received a 'str' 

在遊戲pygame的字體是可選的,但是它將改善遊戲。

回答

3

您需要先創建字體,例如

myfont = pygame.font.SysFont(None,10) # use default system font, size 10 

然後你可以做

mytext = myfont.render('Hello world', 1, (255, 100, 100)) 

最後你需要做塊mytext你的面和更新,以顯示文本。

看一看Pygame的文檔以及在此:http://www.pygame.org/docs/ref/font.html

編輯:如果這是你的完整的腳本,你需要你的事件循環之前,初始化顯示:

screen = pygame.display.set_mode((300,300)) # create a 300x300 display 

可以那麼你的blit文本到屏幕上:

screen.blit(mytext, (0,0)) # put the text in top left corner of screen 
pygame.display.flip() # update the display 

由於文字是靜態的,它不需要是你while True:循環中無論是。您可以先顯示文字。如果您想根據事件更改文本,則應在循環內處理這些內容。

編輯2 回答您在評論部分中的錯誤消息,問題是因爲在您發出pygame.quit()命令後,某些pygame命令仍在運行。原因是因爲你的break命令只打破了for event...循環,但你仍然在while True:循環內,所以blit命令仍然會嘗試運行。

你可以這樣來做:

import pygame 
pygame.init() 
screen = pygame.display.set_mode((1200,600)) 
myfont = pygame.font.SysFont(None, 30) 
mytext = myfont.render('Hello world', 1, (255, 100, 100)) 
running = True 
while running: 
    for event in pygame.event.get(): 
    if event.type==pygame.QUIT: 
     running=False 

    screen.fill((255, 255, 255)) 
    screen.blit(mytext, (600, 300)) 
    pygame.display.flip() 

pygame.quit() 

這應該工作,因爲主循環取決於running是真實的。命中quit將此項設置爲false,因此腳本乾淨地退出while循環,然後運行pygame.quit()命令。

+0

這是很好的,但是當我離開我的程序寫入: 回溯(最近通話最後一個): 文件 「d:\下載\ unim.py」,第11行,在 screen.blit(mytext的內容,(600300 )) pygame.error:display Surface quit – knowledge

+0

這可能是因爲你的blit行在你的'while'循環之後。這意味着,當你退出時,pygame退出,你退出循環,所以它執行下一部分代碼。很難說沒有你的代碼。 – elParaguayo

+0

它是: 進口pygame的 pygame.init() 屏幕= pygame.display.set_mode((1200,600)) myfont = pygame.font.SysFont(無,30) mytext的= myfont.render(「世界,你好',1,(255,100,100)) while True: for pygame.event.get(): if event.type == pygame。QUIT: pygame.quit() 休息 screen.fill((255,255,255)) screen.blit(mytext的,(600,300)) pygame.display.flip() – knowledge