冬夏春秋 发表于 2020-7-7 17:29:51

local variable 'bullets' referenced before assignment

打飞机代码中,我跟着甲鱼写代码,写到这无论如何都不对,求大佬指点一下
跟着小甲鱼写的这一段:
if not(delay % 8):
                bullet_sound.play()
                if is_double_bullet:
                  bullets = bullet2
                  bullets.reset((me.rect.centerx - 33,me.rect.centery))
                  bullets.reset((me.rect.centerx + 30, me.rect.centery))
                  bullet2_index = (bullet2_index + 2) % BULLET2_NUM
                else:
                  bullets = bullet1
                  bullets.reset(me.rect.midtop)
                  bullet1_index = (bullet1_index + 1) % BULLET1_NUM

            #检测子弹是否击中
            for b in bullets:
                if b.active:
                  b.move()
                  screen.blit(b.image,b.rect)
                  enemy_hit = pygame.sprite.spritecollide(b,enemies,False,pygame.sprite.collide_mask)
                  if enemy_hit:
                        b.active = False
                        for e in enemy_hit:
                            if e in mid_enemies or e in big_enemies:
                              e.hit = True
                              e.energy -= 1
                              if e.energy == 0:
                                    e.active = False
                            else:
                              e.active = False
我对照了很多次,跟小甲鱼写的一模一样,但是就是报错UnboundLocalError: local variable 'bullets' referenced before assignment,求助到底出了什么问题

Hello. 发表于 2020-7-7 18:28:12

在赋值前引用了局部变量 “bullets”

Twilight6 发表于 2020-7-7 18:41:28

你这是部分代码,没有用,你试着在代码前面加上 global bullets 试试看

冬夏春秋 发表于 2020-7-8 08:09:22

Twilight6 发表于 2020-7-7 18:41
你这是部分代码,没有用,你试着在代码前面加上 global bullets 试试看

我这是截取了其中一段,因为是写到这卡住了,我昨天试过了加global,但是会出现其他问题{:5_107:}

冬夏春秋 发表于 2020-7-8 08:10:34

Hello. 发表于 2020-7-7 18:28
在赋值前引用了局部变量 “bullets”

不知道咋办,把小甲鱼这部分视频翻来覆去看了好几遍,就是一模一样的,但我就是报错QAQ

qjx 发表于 2020-9-5 15:37:20

这段代码加个缩进
for b in bullets:
                if b.active:
                  b.move()
                  screen.blit(b.image,b.rect)
                  enemy_hit = pygame.sprite.spritecollide(b,enemies,False,pygame.sprite.collide_mask)
                  if enemy_hit:
                        b.active = False
                        for e in enemy_hit:
                            if e in mid_enemies or e in big_enemies:
                              e.hit = True
                              e.energy -= 1
                              if e.energy == 0:
                                    e.active = False
                            else:
                              e.active = False

柒s 发表于 2021-3-31 12:20:37

请问这个问题解决了吗
页: [1]
查看完整版本: local variable 'bullets' referenced before assignment