2012-12-05 109 views
0

我有一個簡單的移動圖像的程序。我嘗試將self.rect作爲load_png()調用的一部分進行聲明,但它根本不喜歡它。究其原因,我認爲這會工作爲http://www.pygame.org/docs/tut/tom/games6.html,他說,這應該工作:self.rect找不到?

def __init__(self, side): 
      pygame.sprite.Sprite.__init__(self) 
      self.image, self.rect = load_png('bat.png') 
      screen = pygame.display.get_surface() 
      self.area = screen.get_rect() 
      self.side = side 
      self.speed = 10 
      self.state = "still" 
      self.reinit() 

這裏是我的代碼,而根據從自己的網站Pygame的教程,應該工作:

def _init_(self): 
    pygame.sprite.Sprite._init_(self) 
    self.state = 'still' 
    self.image = pygame.image.load('goodGuy.png') 
    self.rect = self.image.get_rect()  
    screen = pygame.display.getSurface() 

它給了我這個錯誤:

Traceback (most recent call last): 
File "C:\Python25\RPG.py", line 37, in <module> 
screen.blit(screen, Guy.rect, Guy.rect) 
AttributeError: 'goodGuy' object has no attribute 'rect' 

如果你們需要我所有的代碼,評論吹,我會編輯它。

+0

您是否根據您提供的鏈接定義了load_png函數? – timc

+0

啊哈!我認爲這是一個內置的python函數。返回image.get_rect()就足夠了,對嗎? –

+0

它在您給我們的代碼示例中定義。 – Xymostech

回答

1

您沒有定義load_png函數。

您需要先創建pygame圖像對象,然後才能訪問它的rect屬性。

self.image = pygame.image.load(file) 

然後你就可以使用分配

self.rect = self.image.get_rect() 

的矩形值,或者您可以創建load_png功能按你鏈接的例子。

+0

(請參閱編輯和編輯答案?) –

+0

您需要執行函數self.image.get_rect() - 您需要括號。在你的代碼中你只需要self.image.get_rect。 – timc

+0

我做過了,我不小心沒把它放在編輯 –

0

沒有load_png函數內置到python或pygame中。我想你所指的教程是在某處手動定義的。你想要的是pygame.image.load(filename),然後你可以在返回的Surface對象上調用get_rect()。完整的代碼將如下所示:

self.image = pygame.image.load('bat.png') 
self.rect = self.image.get_rect() 

你的第二個問題是,你定義的函數_init_,但你需要雙下劃線:__init__

此外,您需要發佈錯誤實際發生的代碼。