2014-11-24 26 views
1

我試圖在我的編程中開始使用類和OOP,並試圖將我的基本遊戲窗口設置爲顯示類,當它被調用時創建遊戲窗口,並完成所有的pygame啓動。試圖把我的pygame表面變成一個類

我已經完成了一個視圖教程,但是很難找到一個將pygame.display調用封裝到類中的教程。這是因爲這個/不應該爲pygame正常工作嗎?

最常見的錯誤,我已經得到了,而玩弄它是

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 13, in <module> 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 27, in Display 
NameError: name 'Display' is not defined 

如果我修改我的代碼(通過更換顯示器類(對象) - >類顯示器(寬度,高度,tilesize ),這是我想在我傳遞的價值觀得到一個錯誤:

NameError: name 'width' is not defined 

只是想弄清楚如果錯誤是在我的語法,或者如果我想嘗試不可能 感謝: )

import pygame 
from pygame.locals import * 

#Constants 
TILESIZE = 32 
MAPWIDTH = 16 
MAPHEIGHT = 16 

#variables 
playing = True 

#Creates Display Window 
class Display(object): 

    def __init__(self, width, height, tilesize): 
     pygame.init() 
     pygame.display.set_icon("player.jpg") 
     pygame.display.set_caption("FarmTown Version 1.0") 
     self.SCREEN_WIDTH = width * tilesize 
     self.SCREEN_HEIGHT = height * tilesize 
     self.myScreen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT]) 

    def update(): 
     pygame.display.flip() 

#Set Up Everything To Play 
    myDisplay = Display(MAPWIDTH, MAPHEIGHT, TILESIZE) 


#Game Loop Begins 
while playing: 
    #Display the surface 
    myDisplay.update() 

回答

0

myDisplay是縮進的,所以python認爲它是Display類的一部分。您不能在該類的定義內創建類的實例。另外,set_icon需要一個pygame Surface對象,而不是文件的路徑。爲了解決這個問題,這樣做:

# ... 
    icon = pygame.image.load("player.jpg") 
    pygame.display.set_icon(icon) 
    # ... 

最後,你應該改變這樣的:

self.myScreen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT]) 

這樣:

self.myScreen = pygame.display.set_mode([self.SCREEN_WIDTH, self.SCREEN_HEIGHT]) 
+0

真是一個偉大的提醒,即使identing使代碼漂亮,我不能在Python中這樣做。感謝圖標部分的額外提示。在我看到那部分內容之前,我在清除錯誤信息後修復了最後一部分。感謝你給出了這樣一個徹底的答案。錯誤修復很簡單時我很喜歡。再次感謝。 – 2014-11-25 01:18:31