该属性有什么问题?
class player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.movex = 0
self.movey = 0
self.frame = 0
self.images = []
for i in range(1, 5):
img = pygame.image.load(os.path.join('Assets','Arts','xeonsheet','xeonsheet_' + str(i) + '.png')).convert()
self.images.append(img)
self.image = self.images[0]
self.rect = self.images.get_rect()
def control(self, x, y): #Control player movement
self.movex += x
self.movey += y
def update(self): #Update sprite position
self.rect.x = self.rect.x + self.movex
self.rect.y = self.rect.y + self.movey
# moving left
if self.movex < 0:
self.frame += 1
if self.frame > 3 * ani:
self.frame = 0
# moving right
if self.movex > 0:
self.frame += 1
if self.frame > 3 * ani:
self.frame = 0
player = player()
player.rect.x = 0
player.rect.y = 0
player_list = pygame.sprite.Group()
player_list.add(player)
ani = 4
steps = 10
错误:
Traceback (most recent call last):
File "C:/Users/Acer/PycharmProjects/Dreamwind-Chronicles/main.py", line 148, in <module>
player = player()
File "C:/Users/Acer/PycharmProjects/Dreamwind-Chronicles/main.py", line 122, in __init__
self.rect = self.images.get_rect()
AttributeError: 'list' object has no attribute 'get_rect'
答案 0 :(得分:0)
您似乎试图从Rect
列表中创建self.images
对象。这里的问题是self.images
是列表而不是pygame.image
,因此它没有get_rect()
方法。您应该做的是从该列表中的 图像之一获取Rect
。
另一个问题是您在for循环中运行此代码,因此每个图像的矩形都会被正在进行的图像覆盖。
您的代码应如下所示:
class player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.movex = 0
self.movey = 0
self.frame = 0
self.images = []
for i in range(1, 5):
img = pygame.image.load(os.path.join('Assets','Arts','xeonsheet','xeonsheet_' + str(i) + '.png')).convert()
self.images.append(img)
self.image = self.images[0]
self.rect = self.image.get_rect() #The part that was changed
def control(self, x, y): #Control player movement
self.movex += x
self.movey += y
def update(self): #Update sprite position
self.rect.x = self.rect.x + self.movex
self.rect.y = self.rect.y + self.movey
# moving left
if self.movex < 0:
self.frame += 1
if self.frame > 3 * ani:
self.frame = 0
# moving right
if self.movex > 0:
self.frame += 1
if self.frame > 3 * ani:
self.frame = 0
但是,这假设self.images
列表中的每个图像大小相同。如果它们的大小不同,则播放器的Rect
将仅缩放到第一张图像。要更改此设置,您可以更新更新方法中的self.rect
。但是,我不打算扩展它,因为它不是问题的真正部分。