代码之家  ›  专栏  ›  技术社区  ›  Camil

Pygame精灵上的恒定动画

  •  0
  • Camil  · 技术社区  · 11 年前

    我最近一直在尝试制作一个动画,其中我的精灵在2张图片之间不停地来回移动。我想知道该怎么做。如果能提供任何帮助,我将不胜感激

    import pygame
    import os
    import time
    import sys
    
    image1 = pygame.image.load("image1.png")
    image2 = pygame.image.load("image2.png")
    
    class sprite(object): 
        def __init__(self):
            super(sprite, self).__init__()
            self.x = 0
            self.y = 0
    
        def handle_keys(self):
    
            key = pygame.key.get_pressed()
            distance = 1 
            if key[pygame.K_DOWN]: 
                self.y += distance
    
            if key[pygame.K_UP]:
                self.y -= distance
    
            if key[pygame.K_RIGHT]: 
                self.x += distance
            if key[pygame.K_LEFT]: 
                self.x -= distance
    
    
        def draw(self, surface):
    
            surface.blit(self.image, (self.x, self.y))
    
    
    pygame.init()
    screen = pygame.display.set_mode((1600, 800))
    
    sprite=sprite() 
    clock = pygame.time.Clock()
    
    running = True
    while running:
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                running = False
    
        sprite.handle_keys() 
    
        screen.fill((255,255,255)) 
        sprite.draw(screen) 
        pygame.display.update() 
    
        clock.tick(40)
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   Andrey Sobolev    11 年前

    看看 pyganim 模块 pygame 。在脚本中,导入 [希神][希神神] 创造 PygAnimation 从2个png文件,并将其blit到表面:

    import pyganim
    anim = pyganim.PygAnimation([("image1.png", 0.1), ("image2.png", 0.1)])
    anim.play()
    ... 
    def draw(self, surface):
        anim.blit(surface, (self.x, self.y))
    
        2
  •  0
  •   SirBob    11 年前

    在我的游戏资源中,我上了一节课 Animate() 存储时间、当前索引和图像列表的。我已经有一段时间没有更新了,但这是 anim() 方法当前有效。

    def anim(self, dest, pos, rate, loop=True):
        self.time += 1
        if self.time%rate == 0:
            self.index += 1
    
        if self.index > len(self.imgs)-1:
            if loop:
                self.index = 0
            else:
                self.index = len(self.imgs)-1
    
        dest.blit(self.imgs[self.index], pos)
    

    下面是我如何使用它。

    img1 = pygame.image.load('img1.png')
    img2 = pygame.image.load('img2.png')
    animate = Animate([img1, img2])
    
    while True:
        animate.anim(screen, sprite.pos, 10)
        ....
    

    顺便提一下 rate 不是以秒为基础的,所以它可能会因机器而异,这就是为什么我会调整帧速率,这样它不会走得太快。