self.rect не найден?

У меня есть программа, которая просто создана для перемещения изображения. Я пытаюсь указать self.rect как часть вызова load_png(), но ему это просто не нравится. Причина, по которой я думаю, что это сработает, находится на http://www.pygame.org/docs/tut/tom/games6.html, говоря, что это должно работать:

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'

Если вам, ребята, нужен весь мой код, комментарий взорвался, и я его отредактирую.


person Elias Benevedes    schedule 05.12.2012    source источник
comment
У вас есть функция load_png, определенная в соответствии с предоставленной вами ссылкой?   -  person timc    schedule 05.12.2012
comment
Ахха! Я предположил, что это встроенная функция Python. return image.get_rect() будет достаточно, верно?   -  person Elias Benevedes    schedule 05.12.2012
comment
Это определено в примере кода, который вы нам дали.   -  person Xymostech    schedule 05.12.2012
comment
Вам нужно создать изображение, используя pygame.image.load, и оно будет иметь свойство rect. Смотрите мой ответ ниже.   -  person timc    schedule 05.12.2012
comment
Ошибка, которую вы получаете, происходит за пределами кода, который вы опубликовали. Вам также нужно будет опубликовать этот код. Кроме того, почему вы копируете screen на себя?   -  person kevintodisco    schedule 05.12.2012


Ответы (2)


У вас не определена функция load_png.

Вам нужно создать объект изображения pygame, прежде чем вы сможете получить доступ к его свойству rect.

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

Затем вы можете присвоить значение rect, используя

self.rect = self.image.get_rect()

Или вы можете создать функцию load_png в соответствии с приведенным вами примером.

person timc    schedule 05.12.2012
comment
Вам нужно выполнить функцию self.image.get_rect() - вам нужны скобки. В вашем коде у вас есть только self.image.get_rect. - person timc; 05.12.2012
comment
Ну во-первых; функция должна быть __ init __ (обратите внимание на двойное подчеркивание). У вас есть только одиночные символы подчеркивания (если это не опечатка). - person timc; 05.12.2012
comment
Большое спасибо, я не знал, что вам нужно двойное подчеркивание. Спасибо, что вытерпели это. - person Elias Benevedes; 05.12.2012
comment
Никаких забот. Если это помогло вам, возможно, стоит принять ответ, чтобы помочь другим, у которых может быть аналогичная проблема. - person timc; 05.12.2012

В python или pygame нет встроенной функции load_png. Я предполагаю, что учебник, на который вы ссылаетесь, где-то определил его вручную. Вам нужно pygame.image.load(filename), а затем вы можете вызвать < a href="http://www.pygame.org/docs/ref/surface.html#Surface.get_rect" rel="nofollow">get_rect() в возвращаемом объекте Surface. Полный код будет следующим:

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

Ваша вторая проблема заключается в том, что вы определили функцию _init_, но вам нужны двойные символы подчеркивания: __init__.

Кроме того, вам нужно опубликовать код, где ошибка действительно возникает.

person kevintodisco    schedule 05.12.2012