首页 > 解决方案 > 在pygame中使用'for循环'时如何在屏幕上的图像之间保持特定距离

问题描述

所以这是我的代码的简化版本,我在其中尝试使用 for 循环绘制这些图像。但是当这些图像出现在屏幕上时,它们有时会重叠或相互接触。那么我能做些什么来阻止它。

import pygame
import random

win_size = (600, 400)
win = pygame.display.set_mode(win_size, 0, 32)

jumperImg = []
jumperx = []
jumpery = []

for i in range(5):
    jumperImg.append(pygame.image.load("anyimg.png"))
    jumperx.append(random.randint(0,600))
    jumpery.append(50)



def jumper(x, y, i):
    win.blit(jumperImg[i], (x, y))


running = True
while running:
    for event in pygame.event.get():  # event loop
        if event.type == pygame.QUIT:
            running = False

    for i in range(5):
        jumper(jumperx[i], jumpery[i], i)


    pygame.display.update()

标签: pythonpygame

解决方案


您必须将图像覆盖的矩形区域存储到列表中。用来pygame.Rect表示一个矩形。为新图像创建一个随机位置,并用于collidelist()评估新图像是否与任何其他图像发生碰撞。如果图像发生碰撞,则跳过该位置并创建一个新的随机位置。只要图像发生碰撞,就使用循环重复此过程:

img = pygame.image.load("anyimg.png")

rect_list = []
for i in range(5):
    collide = 0
    while collide >= 0:
        x, y = random.randint(0,600), 50
        img_rect = img.get_rect(topleft = (x, y))
        collide = img_rect.collidelist(rect_list)

    rect_list.append(img_rect)
    jumperImg.append(img)
    jumperx.append(x)
    jumpery.append(y)

推荐阅读