2017-08-13 36 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