내 전략 게임 인 Table Wars에서 오랜 시간 일치하는 동안이 오류가 발생합니다. 전장에 많은 유닛이있을 때마다 발생하는 것으로 보입니다. 여기에 역 추적입니다 :AttributeError : NoneType 객체에 'health'속성이 없습니다.
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'
예외는 타겟팅 및 코드 공격에 나타날 것 같다, 그래서 내가 여기에 게시 할 예정입니다 :
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 <= 0:
self.kill()
def find_target(self):
if self.target is not None: return
for enemy in BluTeam.sprites():
if enemy.rect.centerx - self.rect.centerx <= self.range and enemy.rect.centery - self.rect.centery <= self.range:
self.target = enemy
return
self.target = None
def attack(self):
global REDGOLD
global BLUECOMMAND
if self.target is None: return
if self.target.health <= 0:
REDGOLD += self.target.reward
BLUECOMMAND += self.target.cmdback
self.target = None
if not self.cooldown_ready(): return
self.target.health -= self.attack_damage
def cooldown_ready(self):
now = pygame.time.get_ticks()
if now - self.attack_last >= self.attack_cooldown:
self.attack_last = now
return True
return False
가 어떻게이 문제를 해결합니까?
+1. 나는 세부 사항에서 그 많은 것을 추적 할 수있는 시간을 가지면서 여기 누군가를 보지 못했다. 좋은 작품, 그것이 이익을 도왔 으면 좋겠어. – jadkik94
아, 그러니 내 살인 블록 앞에 피해 라인을 놓아야한다고 말하는거야? – Oventoaster
@Oventoaster 그렇지 않다고 생각하면 좀비와 언데드가 죽어도 게임이 계속 진행됩니다. 중요한 것은 알고리즘 디자인 문제 (손상되기 전에 사망 확인)로 돌아 가기 위해 디버깅 정보 (None이 아니어야 함)를 사용하는 방법을 이해하는 것입니다. – Boud