💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
我们知道,游戏里的动画就是在短暂的时间里让窗口画面不断的变换图像。通过视觉的延迟来欺骗眼镜,让我们以为看到的是一个连续的动画。 想象我们的程序窗口有6个像素宽、1个像素高。除了4, 0位置的像素是黑色的外,所有的像素颜色都是白色的。窗口是这个样子: ![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200354.png) 如果我们同时把第3,0的位置改为黑色、4,0位置改为白色,窗口会展示成下面的样子: ![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200424.png) 对于用户来说,他看到的就是第四个黑色移动到了第三个黑色位置上。如果我们把2,0改为黑色,那真个程序给用户看起来就是一个动画了。 ![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200455.png) 对我们来说这是对话,但是对计算机来讲,它就是在很短的时间里渲染了三张不同图片而已。 下面,我们来做个例子演示猫捉老鼠的动画: ![](https://adatech-1256165843.cos.ap-chengdu.myqcloud.com/20181012200517.png) 看代码: ``` import pygame, sys from pygame.locals import * pygame.init() FPS = 30 # frames per second setting fpsClock = pygame.time.Clock() # set up the window DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32) pygame.display.set_caption('Animation') WHITE = (255, 255, 255) # 加载一个猫的图片,这个后续会讲 catImg = pygame.image.load('cat.png') catx = 10 caty = 10 direction = 'right' while True: # the main game loop DISPLAYSURF.fill(WHITE) if direction == 'right': catx += 5 if catx == 280: direction = 'down' elif direction == 'down': caty += 5 if caty == 220: direction = 'left' elif direction == 'left': catx -= 5 if catx == 10: direction = 'up' elif direction == 'up': caty -= 5 if caty == 10: direction = 'right' # 将图片渲染到窗口上 DISPLAYSURF.blit(catImg, (catx, caty)) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() # 更新窗口 pygame.display.update() # 每秒多少桢 fpsClock.tick(FPS) ``` ## 动画每秒的桢数和pygame.time.Clock对象 动画帧率是指我们程序每秒刷新图片的次数,通常被称为FPS。低帧率会让游戏显得很卡,我们一般设置为30即可。 `pygame.time.Clock` 对象帮助我们指定程序的最大帧率,如果我们不设置这个参数,游戏在一些电脑上会运行过快,导致用户反映不过来。我们调用Clock对象的tick方法来指定游戏帧率。 ``` fpsClock = pygame.time.Clock() fpsClock.tick(FPS) ``` 需要注意的是,`fpsClock.tick(FPS)` 方法通常放在我们游戏主循环的最后一句,也就是`pygame.display.update()`的下面。这样,程序在每一次渲染画面的时候会跟进全面渲染画面的时间来调整当前渲染时间。 **阿达老师-孩子身边的编程专家** *完整课程请关注阿达老师,主页里有完整的课程目录和观看地址*