Can't do walking animation in pygame

I tried to code the game in pygame, but then when I tried to do the walking animation, it only displayed one of the sprites.

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()

      

When I try to use this, it only displays one of the sprites, not the other for the symbol. I want it to be every 1-2 seconds so that it looks like it is walking. Help is appreciated.

+3


source to share


2 answers


First, I highly recommend using a class to avoid using globals.

Secondly, when you set the current time back (0), you make it so that current_time - game_loop.animation_timer is always negative. This will get the operator to work.

I currently suggest removing "if (current_time - game_loop.animation_timer)> 200:" from your code entirely.



Here's an example to get you started (obviously you'll have to change it to make it work for you)

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]

      

0


source


As suggested by @Red Twoon, the material split up in class is very good practice. Another thing you should do is not rely on get_ticks directly, but instead use some kind of time independent motion / animation. You can achieve this by using delta times in a game loop.

Game loop.



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.....

      

0


source







All Articles