diff --git a/source/component/plant.py b/source/component/plant.py index 32b244b..b5cb8e7 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -34,7 +34,7 @@ class Car(pg.sprite.Sprite): def draw(self, surface): surface.blit(self.image, self.rect) - +# 豌豆及孢子类普通子弹 class Bullet(pg.sprite.Sprite): def __init__(self, x, start_y, dest_y, name, damage, effect=False, passedTorchWood=None): pg.sprite.Sprite.__init__(self) @@ -107,9 +107,11 @@ class Bullet(pg.sprite.Sprite): def draw(self, surface): surface.blit(self.image, self.rect) -# 杨桃的子弹,看作豌豆、孢子类子弹的特殊子类 +# 杨桃的子弹 class StarBullet(Bullet): - def __init__(self, x, y, name): + def __init__(self, x, start_y, name, damage, direction): # direction指星星飞行方向 + pg.sprite.Sprite.__init__(self) + self.name = name self.frames = [] self.frame_index = 0 @@ -117,7 +119,59 @@ class StarBullet(Bullet): self.image = self.frames[self.frame_index] self.rect = self.image.get_rect() self.rect.x = x - self.rect.y = y + self.rect.y = start_y + self.direction = direction + self.damage = damage + self.state = c.FLY + self.current_time = 0 + + def loadFrames(self, frames, name): + frame_list = tool.GFX[name] + if name in tool.PLANT_RECT: + data = tool.PLANT_RECT[name] + x, y, width, height = data['x'], data['y'], data['width'], data['height'] + else: + x, y = 0, 0 + rect = frame_list[0].get_rect() + width, height = rect.w, rect.h + + for frame in frame_list: + frames.append(tool.get_image(frame, x, y, width, height)) + + def load_images(self): + self.fly_frames = [] + self.explode_frames = [] + + fly_name = self.name + explode_name = 'PeaNormalExplode' + + self.loadFrames(self.fly_frames, fly_name) + self.loadFrames(self.explode_frames, explode_name) + + self.frames = self.fly_frames + + def update(self, game_info): + self.current_time = game_info[c.CURRENT_TIME] + if self.state == c.FLY: + if self.rect.y != self.dest_y: + self.rect.y += self.y_vel + if self.y_vel * (self.dest_y - self.rect.y) < 0: + self.rect.y = self.dest_y + self.rect.x += self.x_vel + if self.rect.x > c.SCREEN_WIDTH: + self.kill() + elif self.state == c.EXPLODE: + if (self.current_time - self.explode_timer) > 250: + self.kill() + + def setExplode(self): + self.state = c.EXPLODE + self.explode_timer = self.current_time + self.frames = self.explode_frames + self.image = self.frames[self.frame_index] + + def draw(self, surface): + surface.blit(self.image, self.rect) class Plant(pg.sprite.Sprite): diff --git a/source/constants.py b/source/constants.py index 064e3e1..dd3f6ea 100755 --- a/source/constants.py +++ b/source/constants.py @@ -237,6 +237,14 @@ BULLET_DAMAGE_FIREBALL_RANGE = 13 BULLET_EFFECT_ICE = 'ice' BULLET_EFFECT_UNICE = 'unice' +# 杨桃子弹 +# 子弹方向 +STAR_FORWARD_UP = 'forwardUp' # 向前上方 +STAR_FORWARD_DOWN = 'forwardDown' #向前下方 +STAR_BACKWARD = 'backward' #向后 +STAR_UPWARD = 'upward' # 向上 +STAR_DOWNWARD = 'downward' # 向下 + # 僵尸信息 ZOMBIE_IMAGE_RECT = 'zombie_image_rect' ZOMBIE_HEAD = 'ZombieHead'