欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Pygame基础之 精灵(一):基本概念

程序员文章站 2024-03-16 21:15:58
...

一、我们得先了解清楚什么是精灵

1、精灵可以是一个图形对象,也可以是一张图片
2、精灵可以使用pygame绘制函数绘制的图形(Surface对象,也可以是图像文件)
3、每个精灵有个最基本的属性 Rect(是否为一个对象)

二、接下去我们再了解一下什么是精灵类
精灵类是pygame自带的一个类,我们使用它时,并不需要将精灵类进行实例化(创建一个对象),而是去继承它,通过我们自己的需要进行改写。

在接下去我们使用的动画大多数都将使用到精灵类。
话不多说,我们上代码帮助理解

比如我们最开始接触的,在屏幕上绘制一个矩形,这样的矩形算不算一个精灵呢

import pygame,sys
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((500,500))
pygame.display.set_caption("这是一个矩形")
color = (255,255,0)
position = (50,50,100,100)
width = 0

while True:
	for event in pygame.event.get():
		if event.type == QUIT:
			sys.exit()
	
	pygame.draw.rect(screen,color,position,width)
	screen.fill(255,255,255)
	pygame.display.update()

我们上面已经说过,能不能成为精灵是要看它有没有rect属性,接下去让我们检测一下

a = pygame.draw.rect(screen,color,position,width)
	
print(a.rect)

然后我们的小黑框会显示这样一条信息
AttributeError: ‘pygame.Rect’ object has no attribute ‘rect’
看来这样的矩形是没有rect属性的,那么怎么才有rect属性呢

这时精灵类就发挥作用啦,让我们继承精灵类

import pygame,sys

from pygame.locals import *

class Temp(pygame.sprite.Sprite):
    
    def __init__(self,color,initial_position):  #继承精灵类
        
        pygame.sprite.Sprite.__init__(self)     #完成初始化,父类的构造函数
        
        self.image = pygame.Surface([30,30])    #定义显示30*30的一个矩形surface
        
        self.image.fill(color)                  #用color颜色填充矩形
        
        self.rect = self.image.get_rect()       #获取图像的矩形大小
        
        self.rect.topleft = initial_position    #确定左上角的位置

pygame.init()

screen = pygame.display.set_mode([640,480])     

b = Temp([255,0,0],[50,100])                    #传参,创建对象

screen.blit(b.image,b.rect)                  	#将精灵绘制到窗口上   

print(b.rect)									#检测rect属性

while True:
    
    for event in pygame.event.get():
        
        if event.type == QUIT:
            
            sys.exit()
        
        elif event.type == KEYDOWN:
            
            if event.key == K_ESCAPE:
                
                sys.exit()
     
    pygame.display.update()

这时候,我们的小黑框会显示这样的消息
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
<rect(50, 100, 30, 30)>
这个矩形具有rect属性,那么它就是一个精灵