无法在pygame中制作步行动画

时间:2015-07-04 04:26:10

标签: python pygame

我试图用pygame编写游戏代码,但是当我尝试制作一个步行动画时,它只显示了一个精灵。

def go_left(time):
    ness_current = 1
    global ness
    global is_walking_left
    ness_list = [ness_walking,ness_standing]
    current_time = pygame.time.get_ticks()
    go_left.walking_steps = 1
    now = 0
    cooldown = 1000
    flag = 0
    ness = ness_list[ness_current]
    print current_time - game_loop.animation_timer
    if (current_time - game_loop.animation_timer) > 200:
        print 'Changing'
        if ness_current == 0:
            print 'Changing to sprite 1'
            now = pygame.time.get_ticks()
            ness_current = 1
            current_time = now
        elif ness_current == 1:
            print 'Changing to sprite 0'
            if (current_time - game_loop.animation_timer) > 200:
                ness_current = 0
                current_time = now


        else:
            'Changing to sprite 0 because of sprite reset'
            ness_current = 0

    current_time = now

def stop_it():
    global ness
    ness = pygame.image.load('nessthekid.png').convert()
    ness.set_colorkey(WHITE)

car_list = pygame.sprite.Group()
all_sprites = pygame.sprite.Group()
player_list = pygame.sprite.Group()

当我尝试使用它时,它只显示一个精灵而不是另一个精灵。我希望它每隔1或2秒进行一次切换,使其看起来像走路一样。感谢帮助。

2 个答案:

答案 0 :(得分:0)

首先,我强烈建议使用类,以避免使用全局变量。

其次,当您将当前时间设置回现在(0)时,您将使其成为current_time - game_loop.animation_timer将始终为负数。这将使语句不再运行。

目前,我建议您从代码中删除“if(current_time - game_loop.animation_timer)> 200:”。

这是一个让你入门的例子(显然你必须改变它以使它适合你)

class Ness:
    def __init__(self):
        self.all_images = [ness_walking,ness_standing]
        self.current = 0
        self.image = self.all_images[self.current]

    def walk_left(self):
        # Every 200 clicks
        if pygame.time.get_ticks() % 200 == 0:
            if self.current == 0:
                self.current = 1
            else:
                self.current = 0
        self.image = self.all_images[self.current]

答案 1 :(得分:0)

正如@Red Twoon所说,在课堂上分开的东西是一个非常好的做法。你应该做的另一件事是不要直接依赖get_ticks,而是使用某种时间独立的运动/动画。 您可以在游戏循环中使用增量时间来实现此目的。

游戏循环。

while(True):
    delta = #Get the delta time.
    handle_events();
    update(delta);
    draw(delta);

#Animation stuff.
time_to_animate_frame = 200;
time_since_last_update = 0;
...

time_since_last_update += delta;
if(time_since_last_update > time_to_animate_frame):
    time_since_last_update - time_to_animate_frame;
    #Do the animation.....