如何使对象永不重叠? [英] How do I make objects never overlap?

查看:75
本文介绍了如何使对象永不重叠?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 pygame 中制作汽车游戏,但是每当我尝试生成汽车时,其中一些汽车会相互重叠,我该如何解决?

I am trying to make a car game in pygame, but whenever I try to spawn the cars, some of them get on top of each other, how do I fix it?

这是生成汽车的代码:

        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)

推荐答案

创建一个随机位置并评估在 thai 位置的新车是否与任何其他汽车重叠.如果汽车重叠,则丢弃该位置.使用 pygame.Rect 对象和 colliderect() 来评估是否汽车重叠.
下面假设汽车的位置是(enmey.x, enemy.y),汽车的尺寸是(enemy_width>, enemy_height):

Create a random position and evaluate if a new car at thai position is overlapping with any other car. If the car is overlapping, then discard the position. Use pygame.Rect objects and colliderect() to evaluate if cars are overlapping.
In the following is assumed that the position of a car is (enmey.x, enemy.y) and the size of a car is (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)

这篇关于如何使对象永不重叠?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆