我对编程很新,我想弄清楚精灵的基础知识。
所以我有我的精灵课Bullet
:
class Bullet(pygame.sprite.Sprite):
def __init__(self,id_num):
super(Bullet, self).__init__()
self.image = pygame.image.load("bullet.png")
self.rect = self.image.get_rect()
self.id = id_num
def test(self):
print self.id
我创建了一个sprite组bullet_list
,将所有子弹精灵放入。
然后,当点击鼠标时,它将创建一个项目符号,为其分配一个随机ID,并将其添加到bullet_list
组。
if event.type == pygame.MOUSEBUTTONUP:
id_num = random.randint(1,5)
fired_bullet = Bullet(id_num)
bullet_list.add(fired_bullet)
现在我的问题出现了......我无法弄清楚如何将测试函数应用于bullet_list
中的所有精灵。在this post中,它表示要遍历bullet_list
并将函数应用于每个实例。所以我尝试了这一点,但是当它打印出子弹的id时,当它们都应该是不同的时候它们都是一样的。
for i in bullet_list.sprites():
fired_bullet.test()
我觉得问题可能是因为我创建的所有项目符号都具有相同的名称fired_bullet
。
我可能这样做完全错了,它可能非常简单,所以提前抱歉!
这是我的完整代码:
import pygame,sys,random
pygame.init()
screen = pygame.display.set_mode([800,500])
class Bullet(pygame.sprite.Sprite):
def __init__(self,id_num):
super(Bullet, self).__init__()
self.image = pygame.image.load("bullet.png")
self.rect = self.image.get_rect()
self.id = id_num
def test(self):
print self.id
bullet_list = pygame.sprite.Group()
main = True
while main == True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONUP:
id_num = random.randint(1,5)
fired_bullet = Bullet(id_num)
bullet_list.add(fired_bullet)
for i in bullet_list.sprites():
fired_bullet.test()
答案 0 :(得分:0)
如果您正在遍历该组,则应该使用循环变量:
for i in bullet_list.sprites():
i.test()
虽然你应该更好地命名,并且你不需要调用sprites()
- pygame精灵组是迭代的:
for bullet in bullet_list:
bullet.test()
fired_bullet
变量只是指您解雇的 last 项目符号。
此外,您永远不应该在精灵的__init__()
中加载您的图像文件 - 这意味着每次创建项目符号时,您都会将图像从磁盘加载。这将非常缓慢和浪费。相反,在开头加载一次图像(不要忘记convert()
- 它会加快绘图速度):
bullet_img = pygame.image.load("bullet.png").convert()
class Bullet(pygame.sprite.Sprite):
def __init__(self,id_num):
super(Bullet, self).__init__()
self.image = bullet_img