微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在PyGame中拖动2张以上的图像?

如何解决如何在PyGame中拖动2张以上的图像?

我有代码,但我想与其他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,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))
            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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。