2016-12-03 16 views
0

Я пытаюсь справиться коллизию проверки на нескольких спрайтов проверки его против персонажа игрока. Вот соответствующий код, класс Enemy создает новый спрайт, который должен быть представлен изображением, а класс Character похож, кроме спрайта, которым может управлять игрок. Вот соответствующий код, который я отключил от проекта.Как бы я ручка проверки для обнаружения столкновений для нескольких спрайтов одного и того же типа?

self.all_sprites_list = pygame.sprite.Group() 
    sprite = Character(warrior, (500, 500), (66, 66)) 
    enemies = [] 
    for i in range(10): 
     enemy = Enemy("evilwizard") 
     enemies.append(enemy) 
     self.all_sprites_list.add(enemy) 
    self.all_sprites_list.add(sprite) 

class Enemy(pygame.sprite.Sprite): 
# This class represents the types of an enemy possible to be rendered to the scene 

def __init__(self, enemy_type): 
    super().__init__() # Call sprite constructor 
    # Pass in the type of enemy, x/y pos, and width/height (64x64) 
    self.image = pygame.Surface([76, 76]) 
    self.image.fill(WHITE) 
    self.image.set_colorkey(WHITE) 
    self.rect = self.image.get_rect() 
    self.rect.x = random.randrange(10, 1150) # random start 
    self.rect.y = random.randrange(10, 590) # random start 
    self.speed = 2 
    self.move = [None, None] # x-y coordinates to move to 
    self.image = pygame.image.load(FILE_PATH_ENEMY + enemy_type + ".png").convert_alpha() 
    self.direction = None # direction to move the sprite` 

class Character(pygame.sprite.Sprite): 
    def __init__(self, role, position, dimensions): 
    """ 
    :param role: role instance giving character attributes 
    :param position: (x, y) position on screen 
    :param dimensions: dimensions of the sprite for creating image 
    """ 
    super().__init__() 
    # Call the sprite constructor 
    # Pass in the type of the character, and its x and y position, width and height. 
    # Set the background color and set it to be transparent. 
    self.image = pygame.Surface(dimensions) 
    self.image.fill(WHITE) 
    self.image.set_colorkey(WHITE) 
    self.image = pygame.image.load(FILE_PATH_CHAR + role.title + ".png").convert_alpha() 

    # Draw the character itself 
    # position is the tuple (x, y) 
    self.rect = self.image.get_rect() 
    self.rect.x, self.rect.y = position 

    self.attack = role.attack 
    self.health = role.health 
    self.title = role.title 
+0

, если вы используете 'self.image = pygame.image.load() ', тогда нет смысла использовать' self.image = pygame.Surface() ' – furas

+0

Каждый раз, когда спрайт перемещается, новое местоположение должно быть проверено по отношению ко всем другим существующим спрайтам, чтобы увидеть, вызвало ли движение сближения. – martineau

+0

@martineau ive получил метод перемещения для класса «Символ», подобный такому, и проверяет, находятся ли 'self.rect.x' и' self.rect.y' рядом с границами стены, прежде чем разрешить движение, Класс Enemy' имеет метод роуминга, который создает случайное движение, нужно ли мне делать это в этих областях? – timoxazero

ответ

0

Pygame имеет pygame.sprite.spritecollide проверить столкновение между pygame.sprite.Sprite() и pygame.sprite.Group()

Он имеет и другие функции для проверки столкновений - см док для Sprite