2016-12-03 2 views
0

Ich versuche die Kollisionsprüfung mehrerer Sprites zu überprüfen, indem ich sie gegen einen Spielercharakter überprüfe. Hier ist der relevante Code, die Klasse Enemy erstellt ein neues Sprite, das durch ein Bild repräsentiert werden soll, und die Klasse Character ist ähnlich, außer dass es das Sprite ist, das der Spieler steuern kann. Hier ist der relevante Code, den ich aus dem Projekt entfernt habe.Wie würde ich die Kollisionsprüfung für mehrere Sprites desselben Typs überprüfen?

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

wenn Sie 'self.image = pygame.image.load() 'Dann ist es sinnlos,' self.image = pygame.Surface() ' – furas

+0

zu verwenden. Jedes Mal, wenn sich ein Sprite bewegt, muss die neue Position mit allen anderen existierenden Sprites verglichen werden, um zu sehen, ob die Bewegung irgendetwas verursacht hat Kollusionen auftreten. – martineau

+0

@martineau ive hat eine Move-Methode für die 'Character'-Klasse wie diese erhalten und überprüft, ob die' self.rect.x' und 'self.rect.y' in der Nähe der Grenzen der Wand liegen, bevor sie die Bewegung erlauben, und die' Feindklasse hat eine Roam-Methode, die zufällige Bewegung erzeugt, müsste ich es in diesen Bereichen tun? – timoxazero

Antwort

0

Pygame hat pygame.sprite.spritecollide Kollision zwischen pygame.sprite.Sprite() und pygame.sprite.Group()

Es hat auch andere Funktionen zu überprüfen, um Kollisionen zu überprüfen - siehe doc für Sprite

Verwandte Themen