2014-07-11 72 views
2

這是當我嘗試從列表中刪除一個精靈以使其從屏幕上被刪除時所得到的錯誤。我可以通過按下一個鍵來調出這個精靈,但是當我嘗試刪除它時會發生這種情況。 我是在Purpongie的collision detection視頻的幫助下親自操作我自己的代碼。TypeError:destroy()需要0個位置參數,但給出了1個

現在我會告訴你我的省略最無關的事情:

Main.py

while True: 
    process(Select) 
    H2Ps.destroy() 
    H2Ps.List.draw(screen) 

Classes.py

class BaseClass(pygame.sprite.Sprite): 
allsprites = pygame.sprite.Group() 
def __init__(self, x, y, image_string): 

    pygame.sprite.Sprite.__init__(self) 
    BaseClass.allsprites.add(self) 

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

    self.rect = self.image.get_rect() 
    self.rect.x = x 
    self.rect.y = y 


def destroy(self, ClassName): 
    ClassName.List.remove(self) 
    BaseClass.allsprites.remove(self) 
    del self 



class H2Ps(BaseClass): 
List = pygame.sprite.Group() 

def __init__ (self,x,y,image_string): 
    BaseClass.__init__(self,x,y,image_string) 
    H2Ps.List.add(self) 

@staticmethod 
def destroy(): 
    for test in H2Ps.List: 
     if (pygame.key.get_pressed()[pygame.K_ESCAPE]): 
      test.destroy(H2Ps) 

Process.py

def process(Select): 
    if Select.rect.collidepoint(370,400): #How to play 
     if keys[pygame.K_RETURN]: 
      HowToPlay = H2Ps(0,0,"Images/How To Play.png") 

我相信t該錯誤指出Classes.py中的test.destroy(H2Ps)有問題。我已經運行它,它似乎工作,但現在我不確定我可能已經改變,將打破它。我非常感謝一些解決方案。

+1

在Classes.py中有兩個destroy()函數,一個接受參數,另一個不接受。我不確定在這種情況下Python的行爲。 – ydaetskcoR

+0

他的縮進已關閉;兩者都是不同類別的方法。 – chepner

回答

1

您已經覆蓋destroy(self, ClassName)BaseClass與您的destroy()靜態方法在H2Ps。你需要改變其中一個的名字!

所以,當你調用在main.py H2Ps.destroy(),您所呼叫的靜態方法,這再通過List循環:

for test in H2Ps.List: 
    if (pygame.key.get_pressed()[pygame.K_ESCAPE]): 
     test.destroy(H2Ps) 

test這裏是一個H2Ps對象,當你這樣做test.destroy(H2Ps),所以是仍然調用在H2Ps上定義的靜態方法,而不是在BaseClass上的方法destroy(self, ClassName)

不像其他一些語言,方法可以通過它們的參數來區分,所以在Java中,例如,編譯器可以告訴這些方法之間的區別:

public void destroy(String className); 
public static void destroy(); 

Python沒有這樣的工作,選擇只使用名稱來調用哪種方法。當您在H2Ps中覆蓋destroy時,您將用destroy()取代destroy(self, ClassName)的定義。

+0

對不起,我不明白我需要做什麼。你能解釋我需要改變什麼嗎?還有一點爲什麼? – Nectok

+0

我增加了一些額外的細節,希望有所幫助。 –

相關問題