为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪4524236 2023-12-26 16:25:02
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")imgPos = pygame.Rect((0, 0), (0, 0))LeftButton = 0while 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)所以图像重叠并且可以移动第二个图像,我想让两个图像用鼠标移动,我希望分别移动图像
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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_rect

imgPos = 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 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)



查看完整回答
反对 回复 2023-12-26
  • 1 回答
  • 0 关注
  • 49 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信