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.
source to share
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]
source to share
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.....
source to share