2

所以我试图通过在他走路时在两张图片之间切换来“动画”我的角色在 pygame 中。我尝试使用这里提到的代码:在 PyGame 中,如何在不使用睡眠功能的情况下每 3 秒移动一次图像?但结果不太好。事实上,我的角色在行走时只使用一张图片。这里是代码的一部分和一些变量:

  • self.xchange:x 轴上的变化
  • self.img:角色静止时的图像
  • self.walk1 和 self.walk2:我试图用来为我的角色设置动画的两个图像
  • self.x 和 self.y 是坐标 screen 是表面

.

def draw(self):
        self.clock = time.time()
        if self.xchange != 0:
            if time.time() <= self.clock + 0.25:
                screen.blit(self.walk1, (self.x, self.y))
            elif time.time() > self.clock + 0.25:
                screen.blit(self.walk2, (self.x, self.y))
                if time.time() > self.clock + 0.50:
                    self.clock = time.time()
        else: 
            screen.blit(self.img, (self.x, self.y)) 

为什么它不起作用?

4

1 回答 1

1

在 pygame 中,可以通过调用 获取系统时间pygame.time.get_ticks(),它返回自调用以来的毫秒数pygame.init()。见pygame.time模块。

使用属性self.walk_count为角色设置动画。向类添加一个属性animate_time,指示何时需要更改动画图像。将当前时间与animate_timein进行比较draw()。如果超过当前时间animate_time,则递增self.walk_count并计算下一个时间animate_time

class Player:

    def __init__(self):

        self.animate_time = None
        self.walk_count = 0
 
    def draw(self):

        current_time = pygame.time.get_ticks()
        current_img = self.img
        
        if self.xchange != 0:
            current_img = self.walk1 if self.walk_count % 2 == 0 else self.walk2

            if self.animate_time == None:
                self.animate_time = current_time + 250 # 250 milliseconds == 0.25 seconds
            elif current_time >= self.animate_time
                self.animate_time += 250
                self.walk_count += 1
        else: 
            self.animate_time = None
            self.walk_count = 0

        screen.blit(current_img, (self.x, self.y)) 
于 2020-12-20T13:23:19.113 回答