Pygame的脏角色类可见性测试

Sprite类是用于在游戏设计中,作为各个对象的基类的。一个继承自Sprite的类一定要有
image和rect属性,rect由image.get_rect命令来获取,用来代表image的坐标和宽高。
另外,如果要实现像素级的更加完美的碰撞检测,那么要加一个mask属性,它通常能过pygame.mask.from_surface 来创建。
一个角色应该在一个组当中,这样便于高效的集体操作角色。
当子类化Sprite时,不要忘了对父类进行初始化。
在官方文档中有一个继承自Sprite的DirtySprite类,字面意思为脏角色类,今天来测试下。
官方文档为:
http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.DirtySprite

"""
   Pygame的脏角色类可见性测试.
   在官方的Pygame说明了,有一个pygame.sprite.DirtySprite类,
   它是继承自Sprite的一个子类,只是多加了一些属性,
   其中有dirty属性,默认值为1,表示被渲染后又会被设置为0
   值为2时,表示每帧都渲染,值为0时不是dirty的,并且不会被渲染.
   还有一个可见性属性叫visible,值为1时,表示会渲染,值为0时表示
   不会渲染,下面的程序设置了相关属性,可是好像并没有什么用.
   难道还是要自己写if来判断要不要渲染,那定义DirtySprite类有什么用?
     
"""
import pygame
from pygame.locals import *

class Block(pygame.sprite.DirtySprite):
     #  方块类,继承自DirtySprite
    def __init__(self, color, pos,width, height):
       # 调用父类的构造方法
       pygame.sprite.Sprite.__init__(self)

       # 创建图形,填充颜色
       # 也可以从磁盘中加载一幅图像
       self.image = pygame.Surface([width, height])
       self.image.fill(color)

       # 获取它的矩形对象,以后就能通过修改rect的属生从而移动方块
       self.rect = self.image.get_rect(topleft=pos)
 
       self.dirty = 0        # 每帧渲染
       self.visible = 0      # 可见

screen = pygame.display.set_mode((480,360))
pygame.display.set_caption("Pygame的脏角色类可见性测试")

g = pygame.sprite.Group()    # 新建组
red = Block((255,0,0),(50,50),100,100)
green = Block((0,255,0),(150,150),50,50)
g.add(red)                   # 在组中添加red方块
green.add(g)                 # 把green方块添加到组

running = True
while running:
     for event in pygame.event.get():
          if event.type == QUIT:running=False

     screen.fill((128,23,133))
     g.draw(screen)           # 渲染组中的方块
     pygame.display.update()

pygame.quit()