Mercurial > skaapsteker
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