不同的计算机,速度多少有差别,但是pygame却有办法使物体在不同的机器出现相同的速度,从而保证游戏质量,其中道理虽不复杂,本人却觉得相当吊诡,可能思维没有大学时灵活了,我花了几天时间使劲磨。
clock=pygame.time.Clock()
t=clock.tick()
t=clock.tick()
这段简单的代码,返回的t是距离上一次clock.tick()的时间,当她在while True循环中,代表这个系统每次循环(每帧)的时间,当然,每帧肯定有一个blit操作,使屏幕上的物体运动起来。
那怎样使物体有“一致的速度”呢?
import pygame
from pygame.locals import *
v=250 #250像素/秒
sc=pygame.display.set_mode((640,480),0)
ball=pygame.image.load('ball.png').convert_alpha()
x=0
clock=pygame.time.Clock()
pygame.init()
while True:
sc.fill((255,255,255))
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
t=clock.tick()/1000
x += v * t
if x > 640:
x=0
sc.blit(ball,(x,100))
pygame.display.update()
代码不多,图片自己找,主要是理解“速度”
从 x += v * t 看出,x是每帧移动的距离,它和时间t形成线性关系,有多少时间,它就走多少距离,而这个速度v,正好是x/t(距离/时间)。
因此,只要我们定下了速度v,不管机器中每帧的时间t是多少,它总是以相同的速度v走过。就是每帧经过的距离,是定下的速度v和每帧的间隔时间t相乘出来的,不同机器出现不同的t,每帧就出现不同的x,但是x/t总是一致。
这里有一个非常大的理解误区,就是一开始定v=250的时候,很容易被理解为每次循环走250像素,掉进这个坑,就很难出来了。
总结:t确定不了,就确定x与t的关系,要blit的是x,可以感受一致的,是那关系(速度)