pygame程序在Windows 8虚拟机中运行速度太快

时间:2014-02-21 08:29:23

标签: python-3.x windows-8 pygame virtualbox osx-mavericks

我在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问题,还是虚拟机问题......

1 个答案:

答案 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帧。