내 파이 게임 응용 프로그램 인 테이블 전쟁에서 UnboundLocalError가 왜 발생하는지 파악하려고합니다. 여기에 무슨 일을 요약 한 것입니다 : 산란에 자금을 빼서, 메인 루프 내에서 단위를 산란 할 때 작동전역 변수가있는 언 바운드 로컬 오류
#Red Stat Section
REDGOLD = 50
REDCOMMAND = 100
#Blue Stat Section
BLUEGOLD = 50
BLUECOMMAND = 100
def main():
[...]
global REDGOLD
global REDCOMMAND
global BLUEGOLD
global BLUECOMMAND
:
변수, REDGOLD
, REDCOMMAND
, BLUEGOLD
및 BLUECOMMAND
가 전역 변수로 초기화된다 단위. 지금
COMMAND
하고
GOLD
을 벌고 킬러 환불 기반 그래서 그가 죽인 무엇에 시스템을 설치하는 것을 시도하고있다 :
class Red_Infantry(pygame.sprite.Sprite):
def __init__(self, screen):
[...]
self.reward = 15
self.cmdback = 5
[...]
def attack(self):
if self.target is None: return
if self.target.health <= 0:
REDGOLD += self.target.reward #These are the problem lines
BLUECOMMAND += self.target.cmdback #They will cause the UnboundLocalError
#when performed
self.target = None
if not self.cooldown_ready(): return
self.target.health -= self.attack_damage
print "Target's health: %d" % self.target.health
이렇게까지 바로 작동 단위 죽는다. 그런 다음이 발생합니다 :
Traceback (most recent call last):
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 606, in <module>
main()
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 123, in main
RedTeam.update()
File "C:\Python27\lib\site-packages\pygame\sprite.py", line 399, in update
for s in self.sprites(): s.update(*args)
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 304, in update
self.attack()
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 320, in attack
REDGOLD += self.target.reward
UnboundLocalError: local variable 'REDGOLD' referenced before assignment
은 어떻게 attack
블록 변경 위에서 언급 한 전역 변수를받을 수 있나요? 도움이된다면 Pygame 2.7.x를 사용하므로 nonlocal
이 작동하지 않습니다./
를 생성 I 그랬어. 전역 변수는 main() 함수가 화면을 설정하고 시계를 초기화 한 직후 메인 루프에서 호출됩니다. – Oventoaster
멋지게 작동합니다. 고맙습니다! – Oventoaster