python - 如何使对象永不重叠?
问题描述
我正在尝试在 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)
解决方案
创建一个随机位置并评估泰国位置的新车是否与任何其他汽车重叠。如果汽车重叠,则丢弃该位置。使用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)
推荐阅读
- mysql - 触发器中的 FOR EACH ROW 导致语法错误 MYSQL
- javascript - 如何在 React Router 中解析查询字符串
- php - 如果 from_user 已经发送消息,如何忽略其他消息?
- javascript - 从材料表中的 React 状态动态查找
- linux - 如何在备份期间删除旧文件但保留最近的文件?
- vb.net - VB.Net 替代 C# 下划线(丢弃)
- java - 从java插入的oracle sql数据库舍入值中的NUMBER数据类型
- c# - 大列表大小超时练习问题
- javascript - 回调函数的参数值
- r - 比较不同回归方程中系数之间的差异