You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.5 KiB

import pygame
from .. import setup,tools
from .. import constants as C
def create_enemy(enemy_data):
enemy_type = enemy_data['type']
x,y_bottom,direction,color = enemy_data['x'],enemy_data['y'],enemy_data['direction'],enemy_data['color']
if enemy_type == 0: # 蘑菇类
enemy = Goomba(x,y_bottom,direction,'goomba',color)
elif enemy_type == 1:
enemy = Koopa(x,y_bottom,direction,'koopa',color)
return enemy
class Enemy(pygame.sprite.Sprite):
def __init__(self,x,y_bottom,direction,name,frame_rects):
pygame.sprite.Sprite.__init__(self)
self.direction = direction
self.name = name
self.frame_index = 0
self.left_frames = []
self.right_frames = []
self.load_frames(frame_rects)
self.frames = self.left_frames if self.direction == 0 else self.right_frames
self.image = self.frames[self.frame_index]
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.bottom = y_bottom
self.timer = 0
def load_frames(self,frame_rects):
for frame_rect in frame_rects:
left_frame = tools.get_image(setup.GRAPHICS['enemies'],*frame_rect,(0,0,0),C.ENEMY_MULTI)
right_frame = pygame.transform.flip(left_frame,True,False)
self.left_frames.append(left_frame)
self.right_frames.append(right_frame)
def update(self):
self.current_time = pygame.time.get_ticks()
if self.current_time - self.timer > 125:
self.frame_index = (self.frame_index + 1) % 2
self.image = self.frames[self.frame_index]
self.timer = self.current_time
class Goomba(Enemy):
def __init__(self, x, y_bottom, direction, name, color):
bright_frame_rects = [(0, 16, 16, 16), (16, 16, 16, 16), (32, 16, 16, 16)]
dark_frame_rects = [(0, 48, 16, 16), (16, 48, 16, 16), (32, 48, 16, 16)] # 抠图
if not color:
frame_rects = bright_frame_rects
else:
frame_rects = dark_frame_rects
Enemy.__init__(self,x,y_bottom,direction,name,frame_rects)
class Koopa(Enemy):
def __init__(self, x, y_bottom, direction, name, color):
bright_frame_rects = [(96, 9, 16, 22), (112, 9, 16, 22), (160, 9, 16, 22)]
dark_frame_rects = [(96, 72, 16, 2), (112, 72, 16, 22), (160, 72, 16, 22)] # 抠图
if not color:
frame_rects = bright_frame_rects
else:
frame_rects = dark_frame_rects
Enemy.__init__(self,x, y_bottom, direction, name, frame_rects)