# HG changeset patch # User Neil Muller # Date 1302040983 -7200 # Node ID f7fb2ee24c70b6aea8a19ba2d2f957725d183e4b # Parent 0ad313ec564d3670ca93903730f4772cea00238d Twiddle player animation behaviour diff -r 0ad313ec564d -r f7fb2ee24c70 skaapsteker/sprites/player.py --- a/skaapsteker/sprites/player.py Wed Apr 06 00:19:33 2011 +0200 +++ b/skaapsteker/sprites/player.py Wed Apr 06 00:03:03 2011 +0200 @@ -2,6 +2,7 @@ import pygame.transform import os +import time from skaapsteker.sprites.base import TILE_SIZE, PC_LAYER, MONSTER_LAYER from skaapsteker.physics import Sprite @@ -22,6 +23,7 @@ self._image_dict = {} self._animation_frame = 0.0 self._recent_collisions = [] + self._last_time = time.time() # State flags and such self.running = False self.jumping = False @@ -60,8 +62,22 @@ def update(self): v_x, v_y = self.velocity - self._animation_frame += abs(v_x) / 3000.0 - if abs(v_x) < 10: + # Never animate slower than !7 fps, never faster than ~15 fps + old_frame = self._animation_frame + self._animation_frame += abs(v_x) / 300 + time_diff = time.time() - self._last_time + if int(self._animation_frame) - int(old_frame) > 0: + # Check time diff + if time_diff < 0.07: + # Delay animation frame jump + self._animation_frame -= abs(v_x) / 300 + else: + self._last_time = time.time() + elif time_diff > 0.15: + # Force animation frame jump + self._animation_frame = old_frame + 1 + self._last_time = time.time() + if abs(v_x) < 80: # Clamp when we're not moving at least 5 pixel / s self.velocity = (0, v_y) self.running = not self.on_solid # if you're not on something you can't stand