Python 3.x pygame程序在Windows8虚拟机中运行太快

Python 3.x pygame程序在Windows8虚拟机中运行太快,python-3.x,windows-8,pygame,virtualbox,osx-mavericks,Python 3.x,Windows 8,Pygame,Virtualbox,Osx Mavericks,我在两个不同的操作系统上学习了一个简单的pygame教程,程序在每个操作系统上运行的速度都非常不同。我在virtualbox中以来宾身份运行windows 8.1,主机为Mac OSX 10.9。在mac电脑中,程序运行的速度是我假设的正常速度。在windows电脑中,它运行得非常快。太快了。它实际上减慢了操作系统的其他部分。单击“关闭”按钮需要几秒钟才能关闭。在两个操作系统上,python的代码和版本都是相同的。Python 3.3.4。代码如下: import sys, pygame pyg

我在两个不同的操作系统上学习了一个简单的pygame教程,程序在每个操作系统上运行的速度都非常不同。我在virtualbox中以来宾身份运行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()
导入系统,pygame
pygame.init()
尺寸=宽度,高度=320240
速度=[2,2]
黑色=0,0,0
screen=pygame.display.set_模式(大小)
ball=pygame.image.load(“ball.bmp”)
ballrect=ball.get_rect()
而1:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:sys.exit()
ballrect=ballrect.移动(速度)
如果ballrect.left<0或ballrect.right>宽度:
速度[0]=-速度[0]
如果ballrect.top<0或ballrect.bottom>高度:
速度[1]=-速度[1]
屏幕填充(黑色)
屏幕。blit(球、球)
pygame.display.flip()

这是一个简单的程序,只需加载一个球图像,并使球在屏幕上移动。一旦它碰到屏幕边缘,它就会朝相反的方向反弹。很简单。在来宾Windows操作系统中,它在屏幕上的速度过快。在我的主机操作系统(MacOSX)中,它运行良好。我不知道这是Windows问题、python/pygame问题还是virtualbox问题……

要在
pygame
中设置恒定帧速率,请使用

从文件中:

[
勾选
]应每帧调用一次。它将计算自上次调用以来经过的毫秒数

如果您传递可选的
framerate
参数,函数将延迟以使游戏运行速度低于给定的每秒滴答声。这可以用来帮助限制游戏的运行速度。通过每帧调用
Clock.tick(40)
一次,程序的运行速度将不会超过每秒40帧


要在
pygame
中设置恒定帧速率,请使用

从文件中:

[
勾选
]应每帧调用一次。它将计算自上次调用以来经过的毫秒数

如果您传递可选的
framerate
参数,函数将延迟以使游戏运行速度低于给定的每秒滴答声。这可以用来帮助限制游戏的运行速度。通过每帧调用
Clock.tick(40)
一次,程序的运行速度将不会超过每秒40帧


这确实解决了问题。但我很好奇为什么我在这两个操作系统中获得了不同的速度。似乎Mac的速度是每秒30帧,而我不需要告诉它这样做。为什么我必须告诉一个操作系统以每秒30帧的速度运行,而不是另一个操作系统?这可能只是侥幸
pygame
在SDL上运行,SDL主要具有特定于平台的模块(在Windows上通过Quartz for Mac和GDI/DirectX),因此您实际上并没有在两个系统上运行完全相同的代码。这确实解决了问题。但我很好奇为什么我在这两个操作系统中获得了不同的速度。似乎Mac的速度是每秒30帧,而我不需要告诉它这样做。为什么我必须告诉一个操作系统以每秒30帧的速度运行,而不是另一个操作系统?这可能只是侥幸
pygame
在SDL上运行,SDL大多具有特定于平台的模块(在Windows上通过Quartz for Mac和GDI/DirectX),因此您实际上并没有在两个系统上运行完全相同的代码。
FRAMERATE = 30
clock = pygame.time.Clock()

while True:
    clock.tick(FRAMERATE)
    for event in pygame.event.get():
        ...