Я пытаюсь справиться коллизию проверки на нескольких спрайтов проверки его против персонажа игрока. Вот соответствующий код, класс 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
, если вы используете 'self.image = pygame.image.load() ', тогда нет смысла использовать' self.image = pygame.Surface() ' – furas
Каждый раз, когда спрайт перемещается, новое местоположение должно быть проверено по отношению ко всем другим существующим спрайтам, чтобы увидеть, вызвало ли движение сближения. – martineau
@martineau ive получил метод перемещения для класса «Символ», подобный такому, и проверяет, находятся ли 'self.rect.x' и' self.rect.y' рядом с границами стены, прежде чем разрешить движение, Класс Enemy' имеет метод роуминга, который создает случайное движение, нужно ли мне делать это в этих областях? – timoxazero