From 26e49297e5ff871f043b39c92eb1cda4be9695bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Mon, 18 Apr 2022 09:23:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=A5=E7=BA=B8=E8=A2=AB?= =?UTF-8?q?=E9=9D=9E=E7=81=B0=E7=83=AC=E6=A4=8D=E7=89=A9=E7=A7=92=E6=9D=80?= =?UTF-8?q?=E5=90=8E=E4=BC=9A=E8=A7=A6=E5=8F=91=E5=8A=A0=E9=80=9F=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/component/zombie.py | 15 +++++++++++---- source/state/level.py | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/source/component/zombie.py b/source/component/zombie.py index 6b5b494..11af0c9 100755 --- a/source/component/zombie.py +++ b/source/component/zombie.py @@ -70,16 +70,20 @@ class Zombie(pg.sprite.Sprite): def checkToDie(self, framesKind): if self.health <= 0: self.setDie() + return True elif self.health <= c.LOSTHEAD_HEALTH: if not self.lostHead: self.changeFrames(framesKind) self.setLostHead() + return True else: self.health -= (self.current_time - self.losthead_timer) / 40 self.losthead_timer = self.current_time + return False def walking(self): - self.checkToDie(self.losthead_walk_frames) + if self.checkToDie(self.losthead_walk_frames): + return if self.helmetHealth <= 0 and self.helmet: self.changeFrames(self.walk_frames) @@ -98,7 +102,8 @@ class Zombie(pg.sprite.Sprite): self.rect.x -= 1 def attacking(self): - self.checkToDie(self.losthead_attack_frames) + if self.checkToDie(self.losthead_attack_frames): + return if self.helmetHealth <= 0 and self.helmet: self.changeFrames(self.attack_frames) @@ -125,9 +130,11 @@ class Zombie(pg.sprite.Sprite): def freezing(self): if self.old_state == c.WALK: - self.checkToDie(self.losthead_walk_frames) + if self.checkToDie(self.losthead_walk_frames): + return else: - self.checkToDie(self.losthead_attack_frames) + if self.checkToDie(self.losthead_attack_frames): + return if (self.current_time - self.freeze_timer) > c.FREEZE_TIME: self.setWalk() diff --git a/source/state/level.py b/source/state/level.py index 8ab4d95..bce5b33 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -653,7 +653,7 @@ class Level(tool.State): continue for zombie in self.zombie_groups[i]: if ((abs(zombie.rect.centerx - x) <= x_range) or - ((zombie.rect.right - (x-x_range) > 20) or (zombie.rect.right - (x-x_range))/zombie.rect.width > 0.15, ((x+x_range) - zombie.rect.left > 20) or ((x+x_range) - zombie.rect.left)/zombie.rect.width > 0.15)[zombie.rect.x > x]): # 这代码不太好懂,后面是一个判断僵尸在左还是在右,前面是一个元组,[0]是在左边的情况,[1]是在右边的情况 + ((zombie.rect.right - (x-x_range) > 20) or (zombie.rect.right - (x-x_range))/zombie.rect.width > 0.2, ((x+x_range) - zombie.rect.left > 20) or ((x+x_range) - zombie.rect.left)/zombie.rect.width > 0.2)[zombie.rect.x > x]): # 这代码不太好懂,后面是一个判断僵尸在左还是在右,前面是一个元组,[0]是在左边的情况,[1]是在右边的情况 zombie.setDamage(1800, damageType=c.ZOMBIE_ASH_DAMAGE) if zombie.health <= 0: zombie.setBoomDie() @@ -696,7 +696,7 @@ class Level(tool.State): continue for zombie in self.zombie_groups[i]: if ((abs(zombie.rect.centerx - x) <= plant.explode_y_range) or - ((zombie.rect.right - (x-plant.explode_x_range) > 20) or (zombie.rect.right - (x-plant.explode_x_range))/zombie.rect.width > 0.15, ((x+plant.explode_x_range) - zombie.rect.left > 20) or ((x+plant.explode_x_range) - zombie.rect.left)/zombie.rect.width > 0.15)[zombie.rect.x > x]): # 这代码不太好懂,后面是一个判断僵尸在左还是在右,前面是一个元组,[0]是在左边的情况,[1]是在右边的情况 + ((zombie.rect.right - (x-plant.explode_x_range) > 20) or (zombie.rect.right - (x-plant.explode_x_range))/zombie.rect.width > 0.2, ((x+plant.explode_x_range) - zombie.rect.left > 20) or ((x+plant.explode_x_range) - zombie.rect.left)/zombie.rect.width > 0.2)[zombie.rect.x > x]): # 这代码不太好懂,后面是一个判断僵尸在左还是在右,前面是一个元组,[0]是在左边的情况,[1]是在右边的情况 zombie.setDamage(1800, damageType=c.ZOMBIE_RANGE_DAMAGE) # 避免僵尸在用铲子移除植物后还在原位啃食