Python 为什么pygame中的组列表必须有;更新;功能,而不是任何其他功能?
我制作了一个小粒子应用程序,但我正在测试它,底部的函数必须称为“更新”。我认为函数名,就像变量一样,只是一个名称。我认为它的名字不重要,只要你叫它的时候它是一样的。显然我错了。它将只识别“更新”。如果我将函数更改为“move”,它将抛出一个错误。有人能解释一下为什么会这样吗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
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我扩展了答案。