我试图弄清楚为什么我的pygame应用程序Table Wars中出现UnboundLocalError.以下是发生的情况摘要:
变量,REDGOLD,REDCOMMAND,BLUEGOLD和BLUECOMMAND,被初始化为全局变量:
#Red Stat Section
REDGOLD = 50
REDCOMMAND = 100
#Blue Stat Section
BLUEGOLD = 50
BLUECOMMAND = 100
def main():
[...]
global REDGOLD
global REDCOMMAND
global BLUEGOLD
global BLUECOMMAND
Run Code Online (Sandbox Code Playgroud)
这在主循环中产生单位时减少了产生单位的资金.
现在,我正在尝试建立一个系统,以便当一个单位死亡时,杀手会根据他杀死的内容退还受害者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 += …Run Code Online (Sandbox Code Playgroud) 我在战略游戏Table Wars中进行了长时间的比赛,我得到了这个错误.只要战场上有很多单位,似乎就会发生这种情况.这是追溯:
Traceback (most recent call last):
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 727, in <module>
main()
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 131, 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 372, in update
self.attack()
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 393, in attack
self.target.health -= self.attack_damage
AttributeError: 'NoneType' object has no attribute 'health'
Run Code Online (Sandbox Code Playgroud)
例外似乎出现在定位和攻击代码中,因此我将在此处发布:
def move_toward(self, target):
if self.target is None:
self.rect.move_ip(1, 0)
def update(self):
self.find_target()
self.move_toward(self.target)
self.attack()
if self.health …Run Code Online (Sandbox Code Playgroud)