python - 在 Pygame 中加载与角色 Sprite 碰撞时爆炸的图像

标签 python pygame

我正在使用教程中的逐字代码,当射弹与特朗普 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/

相关文章:

python - 设置 x 轴刻度的格式

python - 有没有办法在给定 Rect 对象列表的情况下检查 MOUSBUTTONDOWN 事件?

python - 优化后我的 Sprite 不再显示了。为什么我的 Sprite 没有显示在我的 pygame 代码中?

python - django-graphene 更改列名称弃用

python - 在python中重新排序固定长度数组

python - PyS60 是否生成原生的 sis 文件?

python - 无法在pygame中使用 "create_graphics_screen"?

python - 使用 Plotly 的热图和树状图(聚类图)错误

python - Pygame 类型错误 : missing 1 required positional argument:

python - Pygame 以与玩家相同的方式移动绘制的矩形(不是图像),包括旋转