【问题标题】:How can I drag more than 2 images in PyGame?如何在 PyGame 中拖动超过 2 个图像?
【发布时间】:2020-10-29 13:48:45
【问题描述】:

我有这个代码,但我想用其他 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

【问题讨论】:

    标签: python pygame pygame-surface


    【解决方案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)
    

    【讨论】:

    • 不加载任何图片,只是黑屏
    • @Gabrielbueno 代码现在可以工作了。有一些错别字,因为我是在智能手机上写的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多