使用self.image和current_frame在pygame中为敌人的精灵动画
问题描述:
我想在pygame中为一个视频游戏创造一个TRUMP敌人的动画。我已经加载了所有图像,我希望让他随机移动。我很难让敌人的TRUMP角色的图像动画。我可以得到他的初始框架,但之后我迷路了。您将在animate2函数的代码中看到问题区域。
我很困惑我将如何使用current_frame2或self.image来更新他的精灵。有谁知道如何继续?使用self.image和current_frame在pygame中为敌人的精灵动画
class TRUMP(pg.sprite.Sprite):
def __init__(self, game):
pg.sprite.Sprite.__init__(self)
self.game = game
self.current_frame2 = 0
self.last_update2 = 0
self.load_images()
self.animate2()
self.image = self.TRUMP_fingers_l[0]
self.rect = self.image.get_rect()
self.rect.center = (WIDTH *3/4), (589)
self.pos = vec((WIDTH/2), (HEIGHT/2))
self.vel = vec(0, 0)
self.acc = vec(0, 0)
self.screen = pg.display.set_mode((WIDTH, HEIGHT))
self.clock = pg.time.Clock()
def load_images(self):
self.TRUMP_fingers_l = [self.game.spritesheet.get_image(503, 1, 248, 559)]
for frame in self.TRUMP_fingers_l:
frame.set_colorkey(BLACK)
self.TRUMP_walk1_l = [self.game.spritesheet.get_image(643, 562, 249, 448)]
self.TRUMP_walk2_l = [self.game.spritesheet.get_image(894, 474, 249, 448)]
self.TRUMP_hailing = [self.game.spritesheet.get_image(1, 571, 248, 439)]
self.TRUMP_throwing = [self.game.spritesheet.get_image(753, 1, 248, 471)]
self.TRUMP_smug = [self.game.spritesheet.get_image(252, 1, 249, 562)]
self.TRUMP_flexing_l = [self.game.spritesheet.get_image(1, 1, 249, 568)]
def animate2(self):
now = pg.time.get_ticks()
if now - self.last_update2 > 200:
self.last_update2 = now
self.current_frame2 = self.TRUMP_hailing[0]
self.image = self.TRUMP_hailing[0]
答
在我看来,你只需要一个index
变量(如定时器正常工作),你可以通过图像列表递增到周期。使用模% len(self.TRUMP_hailing)
将索引保持在正确的范围内。
# In the __init__ method:
self.index = 0
def animate2(self):
now = pg.time.get_ticks()
if now - self.last_update2 > 200:
self.index += 1
self.index %= len(self.TRUMP_hailing)
self.last_update2 = now
self.current_frame2 = self.TRUMP_hailing[self.index]
self.image = self.TRUMP_hailing[self.index]