如何创建行走动画?(Pygame,python)
这是我的密码如何创建行走动画?(Pygame,python),python,pygame,Python,Pygame,这是我的密码 jack_right_1 = pg.image.load(os.path.join(img_folder, "jack_right_1.png")).convert() jack_right_2 = pg.image.load(os.path.join(img_folder, "jack_right_2.png")).convert() jack_right_3 = pg.image.load(os.path.join(img_folder, "jack_right_3.png")
jack_right_1 = pg.image.load(os.path.join(img_folder, "jack_right_1.png")).convert()
jack_right_2 = pg.image.load(os.path.join(img_folder, "jack_right_2.png")).convert()
jack_right_3 = pg.image.load(os.path.join(img_folder, "jack_right_3.png")).convert()
player_images = [jack_right_1, jack_right_2, jack_right_3]
class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.image = player_images
self.rect = self.image.get_rect()
self.pos = vec(WIDTH - 650, HEIGHT - 700)
self.standing = False
self.vel = vec(0, 0)
self.acc = vec(0, 0)
def update(self):
self.acc = vec(0, PLAYER_GRAVITY)
keystate = pg.key.get_pressed()
if keystate[pg.K_LEFT]:
player.image = pg.image.load(player_images[counter])
counter = (counter + 1) % len(player_images)
出于某种原因,每当我尝试运行它时,它都会说“list”对象没有“get_rect”属性。我知道你不能从列表中得到一个rect,但是你如何制作一个图像列表并为每个图像得到rect呢 看来你们很接近了!问题是,player_图像和self.image实际上存储了一个曲面对象列表,而不是单个曲面。如果要存储Rect对象列表,可以按如下方式循环:
class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.images = player_images
self.rects = []
for image in self.images:
self.rects.append(image.get_rect())
P>可选的,如果你需要一个同样的事情,考虑列表理解:
class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.images = player_images
self.rects = [image.get_rect() for image in self.images]
pygame.sprite.sprite的图像属性必须是单个曲面。仅将玩家图像的第一个图像指定给self.image。由于调用self.rect=self.image.get\rect,但self.image是一个没有get\rect方法的列表,因此引发了错误
您还需要一个属性来跟踪当前图像的索引,在下面的示例中,我称之为self.counter
现在要更新映像,请增加self.counter并使用模lenplayer_映像以避免索引器。然后使用self.counter索引更新self.image self.image=player\u images[self.counter]
另外,不要在总是被调用的方法中加载图像。像jack_right1一样全局加载它们,然后在程序中重用它们。-pg.key.get_pressed可能应该在主循环中调用。然后您可以将keystate列表传递给所有需要它的精灵。谢谢您的帮助。我现在可以用了。但是,如何控制图像切换的速度?要控制动画速度,您可以使用类似的计时器,并在时间结束时增加图像索引。谢谢您的帮助!
class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.counter = 0 # Index of the current image.
# Assign the first player image.
self.image = player_images[self.counter]
self.pos = vec(WIDTH - 650, HEIGHT - 700)
# Now get_rect works. Set the center or topleft to self.pos.
self.rect = self.image.get_rect(center=self.pos)
self.standing = False
self.vel = vec(0, 0)
self.acc = vec(0, 0)
def update(self):
self.acc = vec(0, PLAYER_GRAVITY)
keystate = pg.key.get_pressed()
if keystate[pg.K_LEFT]:
# Increment the counter.
self.counter = (self.counter + 1) % len(player_images)
# And finally change the image.
self.image = player_images[self.counter]