0

我有一个程序可以简单地移动图像。我尝试将 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'

如果你们需要我所有的代码,请留言,我会编辑它。

4

2 回答 2

1

您没有定义 load_png 函数。

您需要先创建 pygame 图像对象,然后才能访问其 rect 属性。

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

然后你可以使用分配矩形值

self.rect = self.image.get_rect()

或者您可以根据您链接的示例创建 load_png 函数。

于 2012-12-05T03:41:42.037 回答
0

python 或 pygame没有load_png内置函数。我想您所指的教程在某处手动定义了它。你想要的是pygame.image.load(filename)然后你可以调用get_rect()返回的 Surface 对象。完整的代码如下:

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

你的第二个问题是你已经定义了 function _init_,但是你需要双下划线:__init__

此外,您需要发布实际发生错误的代码。

于 2012-12-05T03:39:39.977 回答