Python 为什么pygame中的组列表必须有;更新;功能,而不是任何其他功能?

Python 为什么pygame中的组列表必须有;更新;功能,而不是任何其他功能?,python,list,function,pygame,sprite,Python,List,Function,Pygame,Sprite,我制作了一个小粒子应用程序,但我正在测试它,底部的函数必须称为“更新”。我认为函数名,就像变量一样,只是一个名称。我认为它的名字不重要,只要你叫它的时候它是一样的。显然我错了。它将只识别“更新”。如果我将函数更改为“move”,它将抛出一个错误。有人能解释一下为什么会这样吗 import pygame import random pygame.init() win_height=600 win_width=800 win=pygame.display.set_mode((win_width,wi

我制作了一个小粒子应用程序,但我正在测试它,底部的函数必须称为“更新”。我认为函数名,就像变量一样,只是一个名称。我认为它的名字不重要,只要你叫它的时候它是一样的。显然我错了。它将只识别“更新”。如果我将函数更改为“move”,它将抛出一个错误。有人能解释一下为什么会这样吗

import pygame
import random
pygame.init()
win_height=600
win_width=800
win=pygame.display.set_mode((win_width,win_height))
pygame.display.set_caption("List practice")
white=(255,255,255)
black=(0,0,0)
clock=pygame.time.Clock()

class particle_class(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image=pygame.Surface((25,25))
        self.image.fill(white)
        self.rect=self.image.get_rect()
        self.speed=0
    def update(self):
        self.rect.y+=self.speed
        
particles=pygame.sprite.Group()

for i in range(10):
    particle=particle_class()
    particle.speed=random.randrange(5,11)
    particle.rect.y=0
    particle.rect.x=random.randrange(0,win_width+1)
    particles.add(particle)

while True:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
    win.fill(black)
    particles.update()
    particles.draw(win)
    pygame.display.update()
    for particle in particles:
        if particle.rect.y>win_height:
            particle.rect.y=0
            particle.speed=random.randrange(5,11)
            particle.rect.x=random.randrange(0,win_width+1)

它将只识别“更新”。如果我将函数更改为“move”,它将抛出一个错误

当然可以。阅读的文档

和是由pygame.sprite.Group提供的方法 前者将任务委托给包含的
update
方法-您必须实现该方法

对组中的所有精灵调用update()方法

后者使用包含的
pygame.sprite.sprite
s的
image
rect
属性来绘制对象-您必须确保
pygame.sprite.sprite
s具有所需的属性

将包含的精灵绘制到曲面参数。这将使用源曲面的Sprite.image属性和位置的Sprite.rect属性


如果您想在自己的方法中使用类似的机制,那么您必须实现从
pygame.sprite.Group
派生的自己的类。例如:

classmygroup(pygame.sprite.Group):
定义初始化(self,*args):
super()
def移动(自我):
对于自我中的精灵:
精灵移动
类粒子\u类(pygame.sprite.sprite):
# [...]
def移动(自我):
自校正y+=自校正速度
particles=MyGroup()
对于范围(10)内的i:
粒子=粒子类()
粒子速度=随机随机随机范围(5,11)
particle.rect.y=0
particle.rect.x=random.randrange(0,win_宽度+1)
粒子。添加(粒子)
particles.move()

你是对的;它们只是名字。但这是一个
pygame.sprite.Group
检查的名称。因此,从这个意义上讲,这并不是一件特别的事情,只是让库变得更简单的人说,“如果他们使用名为
update
的方法将对象添加到组中,那么我们将调用它来更新对象”。@ree我扩展了答案。