术语“精灵”是旧计算机和游戏机的保留。这些较旧的盒子无法以足够快的速度绘制和擦除普通图形,使其无法用作游戏。这些机器有特殊的硬件来处理需要快速动画的游戏对象。这些对象被称为“精灵”并有特殊的限制,但可以非常快速地绘制和更新。它们通常存在于视频中的特殊覆盖缓冲区中。这些天来,计算机已经变得足够快,可以在没有专用硬件的情况下处理类似精灵的对象。sprite 一词仍然用于表示 2D 游戏中的任何动画。
这一篇学习笔记,我们来学习精灵,首先给出基础框架代码
import pygame
from pygame.locals import *
import sys
class Game:
def __init__(self):
pygame.init()
self.W,self.H=800,800
self.screen=pygame.display.set_mode((self.W,self.H))
pygame.display.set_caption("【Pygame 学习笔记】")
def listen(self):
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
def draw(self):
self.screen.fill((255,255,255))
def run(self):
while True:
self.listen()
self.draw()
pygame.display.update()
if __name__ == '__main__':
game=Game()
game.run()
给出需要的资源文件:
balloon.png
我们来写一个源源不断有气球从屏幕顶端往下落的程序,首先,我们将balloon.png放置于python文件同目录下的resources文件夹,resources文件夹可以用来储存资源文件,然后定义一个类Balloon,继承自pygame.sprite.Sprite,初始化中进行超类初始化
class Balloon(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
然后继续在初始化方法中创建self.image变量用于储存气球的图片,将图片导入并缩小到50x50的大小,self.rect变量储存该精灵的位置,self.speed表示下落的速度,在程序开头导入random,import random as rd,然后使用随机库的生成随机整数方法,随机生成x坐标,底部y坐标为窗口顶部
注意,这里的self.image和self.rect变量名不可以改成其它名字,因为这两个变量是在pygame的Sprite类中定义的,我们只是重写为自己想要的内容,并且在之后我们要讲到的将精灵绘制到窗口的操作都和这两个变量息息相关,所以这里的self.image和self.rect存储的必须是图像和它对应的rect对象
self.image=pygame.transform.smoothscale(pygame.image.load("resources/balloon.png"),(50,50))
self.rect=self.image.get_rect()