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()