from numpy import size
import pygame
import sys

# --- constants ---  # PEP8: `UPPER_CASE_NAMES` for constants

WHITE = (255, 255, 255)   # PE8: space after `,`
SIZE = (700, 500)
FPS = 120  # there is no need to use `500` because Python can't run so fast,
           # and monitors runs with 60Hz (eventually 120Hz) which can display 60 FPS (120 FPS)

# --- classes ---  # PEP8: `CamelCaseNames` for classes

class MySprite(pygame.sprite.Sprite):
    
    def __init__(self, x, y, picture, colorkey):
        super().__init__()
        
        # you need one of them
        
        # load image
        self.image = pygame.image.load(picture)
        
        # OR

        # create surface        
        # self.image = pygame.Surface((10, 10))
        # self.image.fill((255, 0, 0))
        
        # ----
        
        self.rect = self.image.get_rect()
        self.rect.center = (x, y)

        self.image.set_colorkey(colorkey)
    def update(self):
        if event.type == pygame.MOUSEBUTTONDOWN:
            mouse = pygame.mouse.get_pos()
            print(mouse[:])

# --- main ---

pygame.init()
window_game = pygame.display.set_mode(SIZE)
backGround = pygame.image.load('bg.jpg').convert_alpha(window_game)
backGround = pygame.transform.smoothscale(backGround,SIZE)
backGround.set_colorkey(WHITE)

#placeSP_group = pygame.sprite.Group()
placeSP_group = pygame.sprite.OrderedUpdates()  # Group which keep order

sprite1 = [MySprite(0, 0, 'crossHair.png', WHITE),MySprite(0, 0, 'crossHair_2.png', WHITE)]

placeSP_group.add([sprite1[0],sprite1[1]])
pygame.mouse.set_visible(False)

clock = pygame.time.Clock()   # PEP8: `lower_case_names` for variables

running = True

while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            #running = False
            pygame.quit()
            exit()
            
    # create new Sprite
    global x,y
    x, y = pygame.mouse.get_pos()
    new_sprite = sprite1[:]
    
    # add new Sprite at the end of OrderedUpdates()
    placeSP_group.add([new_sprite])
    # remove Sprite at the beginning of OrderedUpdates()
    placeSP_group.sprites()[0].kill()  
     
    
    placeSP_group.update() 

    # ---

    pygame.display.flip()
    
    window_game.fill('white') 
    window_game.blit(backGround,(0,0)).size
    
    placeSP_group.draw(window_game)
    
    clock.tick(FPS)

当我将新的精灵分配给所有指定的精灵时

推荐答案

创建一个包含图像列表的sprite类.添加计数帧的属性.根据帧数从update方法中的图像列表中获取图像:

class MySprite(pygame.sprite.Sprite):
    
    def __init__(self, x, y, image_list):
        super().__init__()
        self.frame = 0
        self.image_list = image_list
        self.image = self.image_list[0]
        self.rect = self.image.get_rect()
        self.rect.center = (x, y)

    def update(self, event_list):

        animation_interval = 20
        self.frame += 1
        if self.frame // animation_interval >= len(self.image_list):
            self.frame = 0
        self.image = self.image_list[self.frame // animation_interval]
        
        for event in event_list:
            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse = event.pos
                print(mouse[:])

然而,你需要在应用程序循环之前创建一次精灵,而不是在每一帧不断地创建和放大精灵.更改精灵的位置并更新应用程序循环中的精灵:

file_list = ['crossHair.png', 'crossHair_2.png', 'crossHair_3.png']
image_list = []
for name in file_list:
    image = pygame.image.load(name)
    image.set_colorkey(WHITE)
    image_list.append(image)

# create sprite
sprite1 = MySprite(0, 0, image_list)
placeSP_group = pygame.sprite.OrderedUpdates()
placeSP_group.add([sprite1])

clock = pygame.time.Clock()
running = True
while running:

    # handle events
    event_list = pygame.event.get()
    for event in event_list:
        if event.type == pygame.QUIT:
            running = False
            
    # update sprite
    x, y = pygame.mouse.get_pos()   
    placeSP_group.sprites()[0].rect.center = (x, y)     
    placeSP_group.update(event_list) 
    
    # draw scene
    window_game.fill('white') 
    window_game.blit(backGround,(0,0)).size
    placeSP_group.draw(window_game)
    pygame.display.flip()
    
    clock.tick(FPS)

pygame.quit()
exit()

另见:

Python相关问答推荐

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Python上的Instagram API:缺少client_id参数"

scikit-learn导入无法导入名称METRIC_MAPPING64'

如果值不存在,列表理解返回列表

创建可序列化数据模型的最佳方法

当我try 在django中更新模型时,模型表单数据不可见

python中的解释会在后台调用函数吗?

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

如何使regex代码只适用于空的目标单元格

使用Python查找、替换和调整PDF中的图像'

matplotlib图中的复杂箭头形状

如何创建引用列表并分配值的Systemrame列

具有相同图例 colored颜色 和标签的堆叠子图

OpenGL仅渲染第二个三角形,第一个三角形不可见

如何在验证文本列表时使正则表达式无序?

如何根据一定条件生成段id

Django.core.exceptions.SynchronousOnlyOperation您不能从异步上下文中调用它-请使用线程或SYNC_TO_ASYNC

为什么我的scipy.optimize.minimize(method=";newton-cg";)函数停留在局部最大值上?

无法使用请求模块从网页上抓取一些产品的名称