如何在PyGame中拖动多个图像?

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")


imgPos = pygame.Rect((0, 0), (0, 0))


LeftButton = 0

while 1:

 for e in pygame.event.get():

    if e.type == QUIT: exit(0)

    if e.type == MOUSEMOTION:

        if e.buttons[LeftButton]:

            rel = e.rel

            imgPos.x += rel[0]

            imgPos.y += rel[1]

screen.fill(0)

screen.blit(img, imgPos)

pygame.display.flip()

pygame.time.delay(30)

我试图用多个图像来实现这一点,并且图像总是重叠,并且只能移动一个图像,所以尝试了以下方法:


 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 = pygame.Rect((0, 0), (0, 0))

 imgPos1 = pygame.Rect((1, 1), (1, 1))

 LeftButton = 0

 while 1:

     for e in pygame.event.get():

    if e.type == QUIT: exit(0)

    if e.type == MOUSEMOTION:

        if e.buttons[LeftButton]:

            rel = e.rel

            imgPos.x += rel[0]

            imgPos.y += rel[1]

screen.fill(0)

screen.blit(img, imgPos)

screen.blit (img1, imgPos1)

pygame.display.flip()

pygame.time.delay(30)

所以图像重叠并且可以移动第二个图像,我想让两个图像用鼠标移动,我希望分别移动图像


慕田峪4524236
浏览 56回答 1
1回答

蝴蝶不菲

PyGame 中的单位是像素。您的对象重叠,因为垂直和水平位置的差异只有一个像素。imgPos = pygame.Rect((0, 0), (0, 0))imgPos1 = pygame.Rect((1, 1), (1, 1))增加对象的距离并根据相应图像的大小设置矩形的大小。例如imgPos = pygame.Rect((0, 0), img.get_size())offsetX = img.get_width()imgPos1 = pygame.Rect((offsetX, 0), img1.get_size())或者,可以从 by生成pygame.Rect对象。矩形的位置必须由关键字参数设置:pygame.Surfaceget_rectimgPos = img.get_rect(topleft = (0, 0)) imgPos1 = img1.get_rect(topleft = (img.get_width(), 0))如果要选择要移动的图像,则需要添加一个变量来指示当前选择的图像:current_image = None单击图像时,会发生变化current_image。用于collidepoint()验证鼠标是否单击了图像: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移动img如果current_image == 0和移动img1如果current_image == 1: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]import pygamefrom 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 = NoneLeftButton = 0while 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python