让pygame中的角色处于不同的层,即前面与后面的关系研究的源代码。关键地方有代码注释,让你一看就明白! 以下是部分代码预览:
"""
海星与山(分层角色)。
这个程序是关于角色的层设置的。
可以把角色都放在pygame.sprite.LayeredUpdates所实例化的同一个组。
但每个角色所在层可以不一样。
"""
import pygame
from random import *
from pygame.locals import *
class Sprite(pygame.sprite.Sprite):
"""
继承自pygame角色类的Sprite类
本类只是测试pygame.sprite.LayeredUpdates类。
角色会从左到右不断地移动。
"""
def __init__(self,image,pos,screen):
pygame.sprite.Sprite.__init__(self)
self.image = image
self.rect = image.get_rect(center=pos)
self.sw = screen.get_width()
self.dx,self.dy = randint(1,10),0
def update(self):
"""
更新角色坐标
"""
self.rect.move_ip(self.dx,self.dy)
if self.rect.left >= self.sw:
self.rect.right = 0
def main():
"""
主要执行函数
"""
pygame.init()
width,height = 480,360
screen = pygame.display.set_mode((width,height))
pygame.display.set_caption("海星与山(分层角色)LayeredUpdates研究by李兴球")
hill = pygame.image.load('山.png').convert_alpha()
star = pygame.image.load('star.png').convert_alpha()
group = pygame.sprite.LayeredUpdates()
"""pygame官网关于层的说明
If the sprite you add has an attribute layer then that layer will be used.
If the **kwarg contains 'layer' then the sprites passed will be added to that layer (overriding the sprite.layer attribute).
If neither sprite has attribute layer nor **kwarg then the default layer is used to add the sprites.
从上到下三个如果的翻译:
如果添加的角色有一个layer属性,那么这个属性会被使用
如果在添加的时候有关键词参数layer,那么角色会通过它的值得到所在的层,这会覆盖掉它自己的layer属性。
如果没有设置层,会被默认为缺省的0层。
"""
山 = Sprite(hill,(width//2-100,height-100),screen)
海星 = Sprite(star,(width//2,height-200),screen)
group.add(山,layer=0) # 可以通过在这里设置角色所在的层
group.add(海星,layer=1) # 在这里设置的layer会覆盖自身层layer属性
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:running=False
group.update()
screen.fill((0,125,198))
group.draw(screen)
pygame.display.update()
clock.tick(60)
pygame.quit()
if __name__ == "__main__":
main()
下载完整源代码与素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

