Как сделать так, чтобы объекты никогда не перекрывались? - PullRequest
1 голос
/ 20 июня 2020

Я пытаюсь создать автомобильную игру в pygame, но всякий раз, когда я пытаюсь создать машины, некоторые из них оказываются друг над другом, как мне это исправить?

Вот код для создание машины:

        if len(enemiesL) == 0:
            if len(enemiesR) == 0:
                wavelengthL += 3
            for _ in range(wavelengthL):
                enemy = EnemyL(random.randrange(160, Width/2 - 50), random.randrange(-1500, -100), random.choice(["black", "blue", "brown", "darkblue", "orange", "pale", "purple", "red", "white", "yellow"]))
                enemiesL.append(enemy)
        
        if len(enemiesR) == 0:
            wavelengthR += 3
            for _ in range(wavelengthR):
                enemy = EnemyR(random.randrange(Width/2, Width-200), random.randrange(-1500, -100), random.choice(["black", "blue", "brown", "darkblue", "orange", "pale", "purple", "red", "white", "yellow"]))
                enemiesR.append(enemy)

1 Ответ

1 голос
/ 20 июня 2020

Создайте случайную позицию и оцените, пересекается ли новая машина в тайской позиции с любой другой машиной. Если машины перекрывают друг друга, то позицию отбросьте. Используйте объекты pygame.Rect и colliderect(), чтобы оценить, перекрываются ли автомобили. Далее предполагается, что позиция автомобиля (enmey.x, enemy.y), а размер автомобиля (enemy_width, enemy_height):

for _ in range(wavelengthL):
    while True:
        x, y = random.randrange(160, Width/2 - 50), random.randrange(-1500, -100)
    
        new_rect = pygame.Rect(x, y, enemy_width, enemy_height)
        if not any(enmey for enmey in enemiesL if new_rect.colliderect(enmey.x, enmey.y, enemy_width, enemy_height)):
            break
    
    enemy = EnemyL(x, y, random.choice(["black", "blue", "brown", "darkblue", "orange", "pale", "purple", "red", "white", "yellow"]))
    enemiesL.append(enemy)
for _ in range(wavelengthR):
    while True:
        x, y = random.randrange(Width/2, Width-200), random.randrange(-1500, -100)

        new_rect = pygame.Rect(x, y, enemy_width, enemy_height)
        if not any(enmey for enmey in enemiesR if new_rect.colliderect(enmey.x, enmey.y, enemy_width, enemy_height)):
            break

    enemy = EnemyR(x, y, random.choice(["black", "blue", "brown", "darkblue", "orange", "pale", "purple", "red", "white", "yellow"]))
    enemiesR.append(enemy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...