Todo esto lo controlaremos con la clase FpsClock.
import pygame.time class FpsClock: "class for managing FPS related stuff" def __init__(self, desired_fps=30, do_report=0): "create FpsClock instance, give desired running fps and enable report" self.do_report = do_report self.frame_count = 0 self.frame_timer = pygame.time.get_ticks() self.frame_delay = 0 self.last_tick = pygame.time.get_ticks() self.set_fps(desired_fps) self.current_fps = 0.0 def set_fps(self, desired_fps): "set the desired frames per second" if desired_fps: self.fps_ticks = int((0.975/desired_fps) * 1000) #slight fudge, not quite 1000millis else: self.fps_ticks = 0 self.desired_fps = desired_fps def tick(self): "call this once per frame" #delay until milliseconds per frame has passed if self.fps_ticks: now = pygame.time.get_ticks() wait = self.fps_ticks - (now - self.last_tick) pygame.time.delay(wait) self.frame_delay += wait self.last_tick = pygame.time.get_ticks() #update current_fps self.frame_count += 1 time = self.last_tick - self.frame_timer if time > 1000: time -= self.frame_delay if not time: self.current_fps = 1.0 else: self.current_fps = self.frame_count / (time / 1000.0) self.frame_count = 0 self.frame_delay = 0 self.frame_timer = self.last_tick if self.do_report: self.report() def report(self): "override this for fancier fps reporting" subst = (0,0) if (self.current_fps > 0): subst = 1.0/self.current_fps, self.current_fps return 'AVG TIME: %.3f FPS: %.2f' % subst
Esta clase la crearemos dentro de un archivo llamado fpsclock.py dentro de la carpeta de gamemanager.
Ahora solo nos quedará añadir el siguiente código en el archivo juego.py.
import pygame from pygame.locals import * from gamemanager.gamemanager import GameManager from gamemanager.states import menustate from gamemanager.fpsclock import * if __name__ == "__main__": game = GameManager('Estados Juego Python',(320,200),False) game.changeState(menustate.MenuState(game)) fps = FpsClock(35,0) while game.running: game.handleEvents(pygame.event.get()) game.update() game.draw() fps.tick() game.cleanUp()
Con la instruccion fps = FpsClock(35,0) establecemos una tasa de FPS de 35.
El metodo fps.tick() espera a que se cumpla la tasa de FPS establecida.
Me despliega el siguiente error:
ResponderEliminar..\PayGame\gamemanager\__init__.py", line 1, in
fpsclock
NameError: name 'fpsclock' is not defined
Tienes razón, está mal explicado en el texto.
ResponderEliminarNo debes de poner nada en el __init__.py
:P
Ahora mismo lo corrijo.