2017-08-13 39 views
0

我的Python pygame的代碼無法正常工作,它顯示'雪碧' 對象有沒有屬性 'K'

AttributeError: 'Sprite' object has no attribute 'k'

import pygame, sys 
from pygame.locals import * 

screen_width=1360 
screen_height=768 
screen = pygame.display.set_mode([screen_width,screen_height]) 

class Sprite: 
    def p(self): 
     self.s = pygame.Rect(160, 150, 50, 50) 
     self.k = pygame.Rect(160, 200, 500, 50) 
     return s.colliderect(k) 

while True: 
    s1 = Sprite() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit(0) 
    pressed = pygame.key.get_pressed() 
    if pressed[pygame.K_d]: 
     s1.k.x += 1 
    if pressed[pygame.K_a]: 
     s1.k.x -= 1 
    if pressed[pygame.K_w]: 
     s1.k.y -= 1 
    if pressed[pygame.K_s]: 
     s1.k.y += 1 
    if s1: 
     s1.k.x = 200  

    screen.fill((0, 0, 0)) 
    square = pygame.draw.rect(screen, (0, 0, 255), s1.k) 
    sprite = pygame.draw.rect(screen, (200, 0, 0), s1.s) 
    pygame.display.flip() 

這是我的調試信息:

line 33, in s1.k.x = 200

AttributeError: 'Sprite' object has no attribute 'k'

+2

'如果你打電話'p'第一Sprite'不僅具有屬性'k'。 –

+0

@CoryMadden當我嘗試做s1.p.k.x它顯示我AttributeError:'函數'對象沒有屬性'k' – Maksymilian

+0

'p'是一種方法。你必須這樣稱呼它。 's1.p()'然後's1.k.x'。但請閱讀@蝙蝠俠的回答。我很確定這就是你想要做的。 –

回答

1

什麼是p

當你在Python中創建一個對象時,它的__init__方法被調用,它定義了對象的屬性。您需要在那裏定義ks屬性。

喜歡的東西:

def __init__(self): 
    self.k = pygame.Rect(160, 200, 500, 50) 
    self.s = pygame.Rect(160, 150, 50, 50) 
+0

我修改了答案。 – Batman

+0

當我改變p來__init__它顯示我: 線19,在 S1 =精靈() 線14,在__init__ 返回s.colliderect(K) NameError:名稱 's' 沒有限定 – Maksymilian

+0

首先總之,它應該是'__init__'。雙下劃線非常重要。其次,你的'__init__'方法不應該返回任何東西。最後,在你的'p'方法中,你永遠不會定義's'。你可能的意思是'self.s' – Batman