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

2024-01-20

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

Use pygame.Rect.collidelist https://www.pygame.org/docs/ref/rect.html#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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PyGame 中拖动 2 个以上的图像? 的相关文章

随机推荐

  • Struts2 ValueStack如何处理多个请求

    我明白ValueStack在 Struts2 中引入 Struts1 模型的另一项变化现在是一个新的ActionObject为每个请求实例化 所以我们可以定义实例变量而不用担心多线程问题 拦截器和 JSP 访问实例变量的方式ActionOb
  • 如何抑制 ggplot2 图中的垂直网格线?

    我正在构建一个条形图 其中条形足以作为水平 x 放置的指示 因此我想避免绘制多余的垂直网格线 我了解如何在 opts 中设置次要和主要网格线的样式 但我一生都无法弄清楚如何仅抑制垂直网格线 library ggplot2 data lt d
  • Xamarin.Android - 本机代码编译是否会使逆向工程变得更加困难?

    我们正在考虑将 C NET 应用程序移植到 Android 我已经开始阅读有关 Xamarin Android 和 Mono 框架的内容 我刚刚开始Android 开发 我注意到主要http xamarin com android http
  • 在 Scikit-learn 中使用 Smote 和 Gridsearchcv

    我正在处理不平衡的数据集 并希望使用 scikit 的 gridsearchcv 进行网格搜索来调整模型的参数 为了对数据进行过采样 我想使用 SMOTE 并且我知道我可以将其作为管道的一个阶段并将其传递给 gridsearchcv 我担心
  • 当“下拉菜单值更改”时重新加载 d3 图表

    当用户在下拉菜单中选择一个项目以及与该项目对应的数据时 我试图重新加载 d3 js 折线图 我的菜单是股票市场价值列表 YHOO FB 对于其中每一个 我都有一个包含数据的 JSON 文件 该图本身正在发挥作用 我将代码放在 JSFiddl
  • 在 Active Admin 中禁用 CSV 下载

    我正在使用 Active Admin gem 我想隐藏或删除每个模型索引页面上的链接 允许用户下载 CSV XML 或 JSON 格式的数据 有什么办法可以做到这一点吗 现在有一个选项 download links在索引方法上 因此您可以根
  • 测试用例中缺少 ROLLBACK 会导致多数据库 django 应用程序中唯一约束冲突

    我刚刚开始使用工厂男孩 https github com dnerdy factory boy用于测试工厂的 django 库 并且存在重复键约束违规问题 测试成员程序 py from datetime import date timede
  • 如何从 aws 实例内部检测其状态?

    我在 EC2 中有自动缩放组 我想在实例终止时检测实例的状态 以便我可以在实例终止之前开始导出日志文件 我知道实现此目的的一种方法是使用自动缩放生命周期挂钩 但根据我的理解 我必须使用外部监视器 然后该监视器必须 ssh 到实例并导出日志文
  • 从 select 语句 mysql 调用用户定义的存储过程

    我试图从 select 语句调用用户定义的存储过程 但它给了我一个错误 但是 当我调用系统过程时 它工作得很好 有没有办法从 select 语句调用用户定义的过程 这是针对mysql的 SELECT ID email FROM user P
  • 在nodejs日期对象中设置日期将日期显示为不同的值

    当我使用下面的语句设置日期对象时 输出在 NodeJS 中显示不同 你能帮我理解为什么会这样吗 以及我需要如何传递来打印正确的值 var date1 new Date 2017 01 01 var date2 new Date 2017 0
  • Charts.js 直线 - 我找不到解决方案

    所以我使用charts jshttp www chartjs org http www chartjs org 我试图使两个点之间的线是直的而不是弯曲的 没有明显的原因 现在看起来像那样https i stack imgur com rK8
  • 我是否应该使用“self”来定义我不需要从外部访问的实例化类的变量/对象?

    我不是一个完全的初学者 但相当陌生Python 今天在做一个项目时 我只是有一个想法 并想知道 self 我过去读过一段时间 但我仍然无法弄清楚它是否总是必要的 我的问题仅涉及类的实例和实例参数 变量 这个问题与影响所有实例的类变量无关 E
  • 更新复杂 JTable、TableModel 等的正确方法

    我的 GUI 显示了我的车辆park 以及我想要设置的车辆可用的在两个不同的车辆表 扩展 JTable 的类 对于可用的情况 我希望可以从agent 第三方软件 这两个表都显示了行中车辆的描述 为此我创建了车辆表模型 and Vehicle
  • 使用 yum 安装 pgAdmin4

    是否已经有一种方法可以安装 pgAdmin IV Beta 桌面运行时 例如与百胜 我在官网上找到了Python Wheel的下载链接 但是没有yum的提示 桌面运行时似乎还没有可用 pgAdmin 4 已包含在官方中PostgreSQL
  • 更改购物车列的顺序而不覆盖 Woocommerce 中的模板文件

    是否有解决方案可以更改购物车列的顺序 而无需将文件复制到我自己的模板文件夹中 原因是 我不想覆盖这么重要的模板文件 不幸的是 订单被硬编码为文件中的表格cart php并且不在函数内部 在这种情况下 是否有任何 干净 的方法来更改列的顺序
  • 如何使用带有可选提示的expect?

    假设我正在尝试为具有三个提示的 test sh 编写一个 Expect 脚本 prompt1 prompt2 prompt3 我的代码是这样的 spawn test sh expect prompt1 send pass1 expect p
  • ncurses 多线程读写的解决方法

    这就是上面所说的http invisible island net ncurses ncurses faq html multithreads http invisible island net ncurses ncurses faq ht
  • 使用 gam.check() 检查基本尺寸结果的 GAM 拟合问题

    我正在使用 R 包 mgcv 创建用于预测海鸟分布的 GAM 我在解释某些模型的 gam check 结果时遇到一些问题 每个物种一个模型 我正在使用负二项式族和对数链接 以及样本区域对数的偏移量 我有 13 个可能的预测变量 我的回复数据
  • 错误 - 在 has_many 和 Belongs_to 的两端都包含外键?

    我继承的代码具有 class Graphic lt ActiveRecord Base has many comments foreign key gt asset id conditions gt asset type id 5 orde
  • 如何在 PyGame 中拖动 2 个以上的图像?

    我有这个代码 但我想用其他 4 张图像来制作这个 import pygame from pygame locals import pygame display init screen pygame display set mode 1143