Pygame时钟函数返回异常值

0 投票
1 回答
1601 浏览
提问于 2025-04-17 10:21

基本上,我想重新学习Python,所以决定用pygame做一个小游戏,游戏里有一个会弹的球,你需要让它一直在空中弹跳。问题是,当我使用clock.tick()clock.get_time()这两个函数时,get_time应该返回经过的时间(以毫秒为单位),但它返回的时间却是毫秒的十倍。

我的代码:

GRAVITY = 10

def move(self, delta):
    self.x+= (self.vx * delta)
    self.y+= (self.vy * delta)

def speed(self, delta):
    self.vy += (GRAVITY * delta)

clock.tick()

while True:
    clock.tick()
    delta = (clock.get_time() / 100) #should be /1000
    ball.move(delta)
    ball.speed(delta)

当我把时间除以100时,效果就像现实世界一样流畅,但如果我把时间除以1000,游戏就变得很慢。

1 个回答

0

我觉得问题的一部分可能是因为用“1000”去除法,而不是“1000.0”。你可以用下面的代码来确认clock.tick是否正常工作:

import pygame
pygame.init()
i = 0
clock = pygame.time.Clock()
while i < 10: # Just run a few cycles to check the output
    res = clock.tick(1) # Caps framerate to 1 fps
    print res # This should print out 1000
    i += 1

要注意的是,clock.tick已经返回了时间差,通常用来限制帧率。如果不限制帧率,你可能会得到非常高的FPS(每秒帧数),这会导致时间差很小,而当这个小数被一个整数除的时候,结果可能不会大于1,这样你就很少能得到一个数字了。

另外,确保你所有的单位都是正确的,确认你真的想把时间转换成秒。

撰写回答