python - 在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()
解决方案
您必须将图像覆盖的矩形区域存储到列表中。用来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)
推荐阅读
- javascript - 标尺控制错误:未捕获的 SyntaxError:意外的标识符
- excel - 无法设置 Style 类的 IncludeBorder 属性
- powershell - 域控制器上的 Server 2016 PowerShell 自动登录作为管理员不起作用
- postgresql - 预期没有结果时返回结果。SpringBoot/Postgresql
- php - 从本地计算机连接到 GoDaddy 服务器数据库
- python - Strip known extension from filename
- javascript - ReactJS 无法通过 onClick 重新渲染组件
- java - Jersey JAX -RS 中的 @InitBinder 是否有等效项?
- python - 在 Flask 中使用引导程序/css 模板时出现 HTTP 404 错误
- c# - C#将单色图像(1bpp)转换为灰度图像(8bpp)