changeset 123:592477d8b09b

Add fps to game
author Neil Muller <drnlmuller@gmail.com>
date Mon, 04 Apr 2011 23:07:37 +0200
parents 51bcc909873d
children fde3d25cb4b9
files skaapsteker/engine.py skaapsteker/levelscene.py skaapsteker/menuscene.py
diffstat 3 files changed, 15 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/engine.py	Mon Apr 04 22:39:42 2011 +0200
+++ b/skaapsteker/engine.py	Mon Apr 04 23:07:37 2011 +0200
@@ -10,6 +10,8 @@
     def __init__(self):
         self._framerate = 60
         self._current_scene = None
+        self._fpss = [self._framerate] * 100
+        self._cur_frame = 0
 
     def change_scene(self, next_scene):
         if self._current_scene is not None:
@@ -31,9 +33,13 @@
                     self.change_scene(ev.next_scene)
                     break
                 self._current_scene.dispatch(ev)
-            self._current_scene.draw(surface)
+            self._current_scene.draw(surface, self)
             pygame.display.flip()
-            clock.tick(self._framerate)
+            self._fpss[self._cur_frame] = clock.tick(self._framerate)
+            self._cur_frame = self._cur_frame + 1 if self._cur_frame < 99 else 0
+
+    def get_fps(self):
+        return sum(self._fpss) / 100
 
 
 class Scene(object):
--- a/skaapsteker/levelscene.py	Mon Apr 04 22:39:42 2011 +0200
+++ b/skaapsteker/levelscene.py	Mon Apr 04 23:07:37 2011 +0200
@@ -8,6 +8,7 @@
 import level
 import physics
 import sprites.player
+from skaapsteker.widgets.text import Text
 import pygame
 
 class LevelScene(engine.Scene):
@@ -70,7 +71,7 @@
         self._world.thaw()
         self.frozen = False
 
-    def draw(self, screen_surface):
+    def draw(self, screen_surface, engine):
         if self._clip_rect is None:
             self._clip_rect = pygame.Rect((0, 0), screen_surface.get_size())
 
@@ -81,6 +82,10 @@
         self._level.draw(self._level_surface)
         self._world.draw(self._level_surface)
 
+        fps_text_pos = self._clip_rect.left + 10, self._clip_rect.top + 10
+        fps_text = Text('FPS: %.1f' % engine.get_fps(), fps_text_pos)
+        fps_text.draw(self._level_surface)
+
         screen_surface.blit(self._level_surface, (0, 0), self._clip_rect)
 
     def _update_clip_rect(self):
--- a/skaapsteker/menuscene.py	Mon Apr 04 22:39:42 2011 +0200
+++ b/skaapsteker/menuscene.py	Mon Apr 04 23:07:37 2011 +0200
@@ -33,7 +33,7 @@
             self.cur_game.thaw()
             ChangeScene.post(self.cur_game)
 
-    def draw(self, surface):
+    def draw(self, surface, engine):
         surface.fill(pygame.Color('black'))
         super(MenuScene, self).draw(surface)