changeset 167:f7fb2ee24c70

Twiddle player animation behaviour
author Neil Muller <drnlmuller@gmail.com>
date Wed, 06 Apr 2011 00:03:03 +0200
parents 0ad313ec564d
children 77274af74091
files skaapsteker/sprites/player.py
diffstat 1 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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