我正在使用教程中的逐字代码,当射弹与特朗普 Sprite 碰撞时触发爆炸。我在爆炸类下面粘贴了加载爆炸图像的代码部分,以及在更新部分中进行碰撞的代码。我收到以下错误 self.image =explosion_anim[self.size][0] NameError: name 'explosion_anim' 未定义。我开始认为这是因为我稍后在代码中定义了explosion_anim,但是教程中的那个人的代码和我的一样。如果有人可以帮忙。
class Explosion(pg.sprite.Sprite):
def __init__(self, center, size):
pg.sprite.Sprite.__init__(self)
self.size = size
self.image = explosion_anim[self.size][0]
self.rect = self.image.get_rect()
self.rect.center = center
self.frame = 0
self.last_update = pg.time.get_ticks()
self.frame_rate = 50
def update(self):
now = pg.time.get_ticks()
if now - self.last_update > self.frame_rate:
self.last_update = now
self.frame += 1
if self.frame == len(explosion_anim[self.size]):
self.kill()
else:
center = self.rect.center
self.image = explosion_anim[self.size][self.frame]
self.rect = self.image.get_rect()
self.rect.center = center
我忘了注意这个东西在load_images下。这可能不是放置它的最佳位置。
def load_images
#other images loaded here
explosion_anim = {}
explosion_anim['lg'] = []
explosion_anim['sm'] = []
for i in range(9):
filename = 'regularExplosion0{}.png'.format(i)
img = pg.image.load(filename).convert()
img.set_colorkey(BLACK)
img_lg = pg.transform.scale(img, (75, 75))
explosion_anim['lg'].append(img_lg)
img_sm = pg.transform.scale(img, (32, 32))
explosion_anim['sm'].append(img_sm)
执行碰撞的代码部分如下。
def update:
TrumpHits = pg.sprite.spritecollide(self.trump, self.projectiles, True)
for hit in TrumpHits:
print("TRUMP HIT!!!")
expl = Explosion(hit.rect.center, 'lg')
all_sprites.add(expl)
最佳答案
self.image = explosion_anim[self.size][0]
这就是错误所在。抛出错误是因为在初始化对象时(即在 __init()__
方法中)引用字典 explosion_anim
,但该字典甚至不存在直到您在 update()
方法中创建它。
而不是 self.image =explosion_anim[self.size][0]
尝试:
img = pg.image.load('regularExplosion00.png').convert()
img.set_colorkey(BLACK)
if size == 'lg':
self.image = pg.transform.scale(img, (75, 75))
elif size == 'sm':
self.image = pg.transform.scale(img, (32, 32))
<小时/>
明确地说,这应该是您的新 __init()__
:
def __init__(self, center, size):
pg.sprite.Sprite.__init__(self)
self.size = size
img = pg.image.load('regularExplosion00.png').convert()
img.set_colorkey(BLACK)
if size == 'lg':
self.image = pg.transform.scale(img, (75, 75))
elif size == 'sm':
self.image = pg.transform.scale(img, (32, 32))
self.rect = self.image.get_rect()
self.rect.center = center
self.frame = 0
self.last_update = pg.time.get_ticks()
self.frame_rate = 50
关于python - 在 Pygame 中加载与角色 Sprite 碰撞时爆炸的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432339/