[英]How can I drag more than 2 images in PyGame?
我有这个代码,但我想用其他 4 张图片制作这个?
import pygame
from pygame.locals import *
pygame.display.init()
screen = pygame.display.set_mode((1143,677 ))
img = pygame.image.load(r"C:\Users\ga-sa\Downloads\As.png")
img1 = pygame.image.load(r"C:\Users\ga-sa\Downloads\03.png")
imgPos = img.get_rect(topleft = (20, 20))
imgPos1 = img1.get_rect(topleft = (60, 20))
current_image = None
LeftButton = 0
while 1:
for e in pygame.event.get():
if e.type == QUIT:
pygame.quit()
exit(0)
if e.type == pygame.MOUSEBUTTONDOWN:
if imgPos.collidepoint(e.pos):
current_image = 0
elif imgPos1.collidepoint(e.pos):
current_image = 1
else:
current_image = None
if e.type == MOUSEMOTION:
if e.buttons[LeftButton]:
rel = e.rel
if current_image == 0:
imgPos.x += rel[0]
imgPos.y += rel[1]
elif current_image == 1:
imgPos1.x += rel[0]
imgPos1.y += rel[1]
screen.fill(0)
screen.blit(img, imgPos)
screen.blit (img1, imgPos1)
pygame.display.flip()
pygame.time.delay(30)
所以这是我的代码,我想放 4 张图片,而不是只有两张图片,我想放更多的图片,但它是一个布尔值,所以是 0 或 1
创建一个包含 4 个图像的列表:
images = [img1, img2, img3, img4]
创建一个图像矩形列表:
img_rects = [images[i].get_rect(topleft = (20+40*i, 20)) for i in range(len(images))]
使用pygame.Rect.collidelist
找到被点击的图像:
if e.type == pygame.MOUSEBUTTONDOWN:
mouse_rect = pygame.Rect(e.pos, (1, 1))
current_image = mouse_rect.collidelist(img_rects)
绘制current_image
:
if e.type == MOUSEMOTION:
if e.buttons[LeftButton]:
rel = e.rel
if 0 <= current_image < len(images):
img_rects[current_image].x += rel[0]
img_rects[current_image].y += rel[1]
在循环中绘制图像:
for i in range(len(images)):
screen.blit(imgages[i], img_rects[i])
最小的例子:
import pygame
from pygame.locals import *
pygame.display.init()
screen = pygame.display.set_mode((1143, 677))
img1 = pygame.image.load(r"C:\Users\ga-sa\Downloads\As.png")
img2 = pygame.image.load(r"C:\Users\ga-sa\Downloads\03.png")
img3 = pygame.image.load(r"C:\Users\ga-sa\Downloads\As.png")
img4 = pygame.image.load(r"C:\Users\ga-sa\Downloads\03.png")
images = [img1, img2, img3, img4]
current_image = -1
img_rects = [images[i].get_rect(topleft = (20+40*i, 20)) for i in range(len(images))]
LeftButton = 0
while 1:
for e in pygame.event.get():
if e.type == QUIT:
pygame.quit()
exit(0)
if e.type == pygame.MOUSEBUTTONDOWN:
mouse_rect = pygame.Rect(e.pos, (1, 1))
current_image = mouse_rect.collidelist(img_rects)
if e.type == MOUSEMOTION:
if e.buttons[LeftButton]:
rel = e.rel
if 0 <= current_image < len(images):
img_rects[current_image].x += rel[0]
img_rects[current_image].y += rel[1]
screen.fill(0)
for i in range(len(images)):
screen.blit(images[i], img_rects[i])
pygame.display.flip()
pygame.time.delay(30)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.