我在2个不同的操作系统上进行了简单的pygame教程,程序在每个操作系统上以非常不同的速度运行。我在虚拟机中运行Windows 8.1作为访客,Mac OSX 10.9作为主机。在mac中,程序运行我认为是正常速度。在Windows计算机中,它运行得非常快。太快。它实际上减慢了操作系统的其余部分。当我单击关闭按钮时,需要几秒钟才能关闭。两个操作系统上的代码和python版本是相同的。 Python 3.3.4。这是代码:
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2,2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("ball.bmp")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
这是一个简单的程序,只是加载一个球图像并让球在屏幕上移动。一旦它碰到屏幕边缘,它就会以相反的方向反弹。很简单。在来宾Windows操作系统中,它在屏幕上飞得太快。在我的主机操作系统(mac OSX)中,它运行正常。我不知道这是Windows问题,python / pygame问题,还是虚拟机问题......
答案 0 :(得分:4)
要在pygame
中设置固定帧率,请使用Clock.tick
FRAMERATE = 30
clock = pygame.time.Clock()
while True:
clock.tick(FRAMERATE)
for event in pygame.event.get():
...
来自文档:
应该每帧调用一次[
tick
]。它将计算自上次调用以来经过的毫秒数。如果你传递了可选的
framerate
参数,该函数将延迟使游戏运行速度低于每秒给定的滴答数。这可以用于帮助限制游戏的运行时速度。通过每帧调用Clock.tick(40)
一次,程序将永远不会超过每秒40帧。