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
wenn Sie 'self.image = pygame.image.load() 'Dann ist es sinnlos,' self.image = pygame.Surface() ' – furas
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
@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