海星与山(分层角色)源代码

海星与山(分层角色)源代码

海星与山(分层角色)LayeredUpdates研究by李兴球

海星与山(分层角色)LayeredUpdates研究by李兴球

海星与山(分层角色)LayeredUpdates研究by李兴球


让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资源。)

李兴球

李兴球的博客是Python创意编程原创博客

评论已关闭。