def _base(self, framerate=None, use_accurate_delay=False): if framerate: endtime = int((1.0 / framerate) * 1000.) self._rawpassed = sdl.SDL_GetTicks() - self._last_tick delay = endtime - self._rawpassed _try_init() if use_accurate_delay: delay = _accurate_delay(delay) else: delay = max(delay, 0) sdl.SDL_Delay(delay) nowtime = sdl.SDL_GetTicks() self._timepassed = nowtime - self._last_tick self._fps_count += 1 self._last_tick = nowtime if not framerate: self._rawpassed = self._timepassed if not self._fps_tick: self._fps_count = 0 self._fps_tick = nowtime elif self._fps_count >= 10: try: self._fps = (self._fps_count / ((nowtime - self._fps_tick) / 1000.0)) except ZeroDivisionError: self._fps = float('inf') self._fps_count = 0 self._fps_tick = nowtime return self._timepassed
def _accurate_delay(ticks): if ticks <= 0: return 0 start = sdl.SDL_GetTicks() if ticks >= WORST_CLOCK_ACCURACY: delay = (ticks - 2) - (ticks % WORST_CLOCK_ACCURACY) if delay >= WORST_CLOCK_ACCURACY: sdl.SDL_Delay(delay) # hog CPU for a bit to get the delay just right delay = ticks - (sdl.SDL_GetTicks() - start) while delay > 0: delay = ticks - (sdl.SDL_GetTicks() - start) return sdl.SDL_GetTicks() - start
def wait(milliseconds): """ wait(milliseconds) -> time pause the program for an amount of time """ try: milliseconds = int(milliseconds) except (ValueError, TypeError): raise TypeError("wait requires one integer argument") _try_init() milliseconds = max(milliseconds, 0) start = sdl.SDL_GetTicks() sdl.SDL_Delay(milliseconds) return sdl.SDL_GetTicks() - start