03.动画

import pygame
import sys
from pygame.locals import *

pygame.init()

# 帧速率(frame rate)或刷新速率(refresh rate)是程序每秒钟绘制的图像的数目,
# 用FPS或帧/秒来度量(在计算机显示器上,FPS常见的名称是赫兹。很多显示器的帧速率是60Hz,或者说每秒60帧)。
# 视频游戏中,较低的帧速率会使得游戏看上去抖动或卡顿。
# 如果游戏包含的代码太多了,以至于无法运行来频繁地绘制到屏幕上,那么,FPS会下降。
FPS = 30
fpsClock = pygame.time.Clock()

DISPLAYURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Animation')

WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')  # 将图像(精灵)加载到Surface对象上,返回一个Surface对象
catx = 10
caty = 10
direction = 'right'

while 1:
    DISPLAYURF.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'
    # 必须将图像的Surface对象复制到显示Surface对象上。位图复制(Blitting)就是将一个Surface的内容绘制到另一个Surface之上
    # 把catImg复制到了DISPLAYSURF,参数二:左上角的X和Y坐标
    # 注意,不能复制当前“锁定”的一个Surface(例如,通过其生成了一个PixelArray对象并且还没有删除该对象,查看上一笔记中的绘制点像素就用到PixelArray对象)
    DISPLAYURF.blit(catImg, (catx, caty))
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    pygame.display.update()

    # pygame.time.Clock对象确保程序以某一个最大的FPS运行。Clock对象将会在游戏循环的每一次迭代上都设置一个小小的暂停,从而确保游戏程序不会运行得太快。
    # 如果没有这些暂停,游戏程序可能会按照计算机所能够运行的速度去运行。这对玩家来说往往太快了,并且计算机越快,它们运行游戏也就越快。
    # 在游戏循环中调用一个Clock对象的tick()方法,可以确保不管计算机有多快,游戏都按照相同的速度运行
    fpsClock.tick(FPS)  # 将其设置为一个较低的值,程序运行得较慢。较高的值,程序运行得较快

 

图片官网地址:http://invpy.com/cat.png

 

posted @ 2019-10-29 10:30  fly_bk  阅读(179)  评论(0编辑  收藏  举报