Mario corriendo por la pantalla demasiado rápido en pygame

Así que primero de todo el código:

import pygame, sys from pygame.locals import * class Person(pygame.sprite.Sprite): def __init__(self, screen): self.screen = screen pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load("images/mariowalking0.png") self.rect = self.image.get_rect() self.rect.center = (320, 220) self.poseNumber = 1 def update(self): self.rect.centerx += 1 if self.rect.centerx > self.screen.get_width(): self.rect.centerx = 0 self.poseNumber = (self.poseNumber + 1) if self.poseNumber == 2: self.poseNumber = 0 self.image = pygame.image.load("images/mariowalking" + str(self.poseNumber) +".png") def main(): screen = pygame.display.set_mode((640, 480)) background = pygame.Surface(screen.get_size()) background.fill((255, 255, 255)) screen.blit(background, (0, 0)) boy = Person(screen) allSprites = pygame.sprite.Group(boy) keepGoing = True while keepGoing: for event in pygame.event.get(): if event.type == pygame.QUIT: keepGoing = False pygame.quit() allSprites.clear(screen, background) allSprites.update() allSprites.draw(screen) pygame.display.flip() if __name__ == "__main__": main() 

Si desea ejecutar el código, las imágenes de los sprites se pueden encontrar aquí: http://imgur.com/a/FgfAd

El Mario Sprite recorre la pantalla a un ritmo muy rápido. A pesar de que dije que voy a boost el valor de centerx en 1. Cualquier idea de por qué sucede esto.

Por cierto, soy realmente nuevo en pygame, lo siento si estoy pasando por alto un hecho obvio o algo así.

Su progtwig se ejecutará a diferentes velocidades en diferentes computadoras, depende de la velocidad de la computadora. Puedes usar pygame.time.Clock () para obtener la misma velocidad en todas las computadoras (excepto computadoras muy lentas) y también para ralentizar el juego y la velocidad de Mario.

 clock = pygame.time.Clock() while keepGoing: # rest of the code pygame.display.flip() clock.tick(30) 

Ahora el juego dibujará 30 cuadros por segundo (FPS) en todas las computadoras y Mario se dibujará 30 veces por segundo. 25 FPS es suficiente para que el ojo humano vea una buena animación. Si lo necesita, puede configurar más FPS, por ejemplo 60.


Este código ( get_fps() y tick() sin documentos) le muestra qué tan rápido es el juego en su computadora. En mi computadora obtengo principalmente 500 FPS (pero a veces incluso 1400 FPS).

 clock = pygame.time.Clock() while keepGoing: # rest of the code pygame.display.flip() clock.tick() print clock.get_fps() 

EDITAR: si minimizo la ventana obtengo 10 000 FPS 🙂


EDITAR:

Si aún necesita reducir la velocidad de Mario y tiene al menos 30 FPS, debe verificar la hora antes de mover a Mario.

 class Person(pygame.sprite.Sprite): def __init__(self, screen): # rest of code self.next_move = pygame.time.get_ticks() + 100 # 100ms = 0.1s def update(self): if pygame.time.get_ticks() >= self.next_move: self.next_move = pygame.time.get_ticks() + 100 # 100ms = 0.1s # rest of code 

Utilizo get_ticks() para obtener la hora actual en milisegundos (ms) (1000 milisegundos = 1 segundo) y el tiempo de cómputo del siguiente movimiento (100 milisegundos = 0,1 segundos). Ahora Mario hará 10 pasos por segundo. De esta manera, siempre hará 10 pasos por segundo, incluso si cambio FPS a 10 000 :).