Pygame时钟函数返回异常值
基本上,我想重新学习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,这样你就很少能得到一个数字了。
另外,确保你所有的单位都是正确的,确认你真的想把时间转换成秒。