检查图像和线条之间的碰撞

2024-01-12

我检查碰撞:

offset = (x0 - x1, y0 - y1)
result = player1.mask.overlap(player2, offset)

它在两个图像之间工作。

但如果我想检查图像和pygame.draw.line(...) (I use it https://stackoverflow.com/questions/42317756/how-to-get-the-surface-from-a-rect-line/42318036#42318036用于从线创建蒙版)。mask.overlap回报None:

surface = self.gameDisplay.subsurface(pygame.draw.line(self.gameDisplay, colors.GREEN, [100, 100], [200, 200], 5))
line_mask = pygame.mask.from_surface(surface)
pygame.draw.line(self.gameDisplay, colors.GREEN, [100, 100], [200, 200], 5)

offset = (x0 - x1, y0 - y1)
result = player1.mask.overlap(mask, offset)

对不起我的英语不好。


您错过了通过以下方式创建具有每像素 alpha 的表面.convert_alpha() https://www.pygame.org/docs/ref/surface.html#pygame.Surface.convert_alpha,在从“线”曲面创建蒙版之前:

line_rect = pygame.draw.line(gameDisplay, colors.GREEN, [100, 100], [200, 200], 5)
line_surf = gameDisplay.subsurface(line_rect)
line_mask = pygame.mask.from_surface(line_surf.convert_alpha())

x0, y0 = line_rect.topleft
x1, y1 = player1.rect.topleft

offset = (x0 - x1, y0 - y1)
if player1.mask.overlap(line_mask, offset):
    print("hit : ", count)

See the example: repl.it/@Rabbid76/PyGame-PyGame-SurfaceLineMaskIntersect-1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查图像和线条之间的碰撞 的相关文章

随机推荐

  • Flutter:如何避免在现有路由上推送相同的路由

    我有带有底部导航栏的视图 当您按下导航栏项目时 一条新路线将被推入视图中 final navigatorKey GlobalKey
  • Azure B2C:检查本地帐户创建期间是否存在另一个声明

    除了通常根据所使用的电子邮件当前是否存在创建帐户之外 我想知道如何检查 Azure Active Directory 中是否不存在另一个声明值 例如 对于我们的应用程序 创建帐户的任何人都必须提供组织名称 一旦他们注册 他们就是其组织群组的
  • 如何使用 Selenium 和 Python 更改用户代理

    我在使用 selenium 更改 Python 中的 Web 驱动程序用户代理时遇到错误 这是我的代码 import requests import json from selenium import webdriver from sele
  • Vector3 不可序列化 Unity3D

    好吧 我按照 Unity3D 数据持久化教程进行操作 一切都很顺利 直到我尝试保存 Vector3 类型的数据 本教程仅展示如何保存 int 和 string 当我使用函数 Save 时 控制台向我显示says SerializationE
  • 使用 REST API 的可编辑 jQuery 网格推荐

    首先 我已经读过这个问题 jQuery 网格建议 https stackoverflow com questions 159025 jquery grid recommendations 但这并不能回答我的问题 我有一个小带有 MongoD
  • 带指数的浮点文字的类型

    具有指数部分的浮点文字是什么类型 例如123456e 3在 C 99 中 是否属于类型float or double 当用作float初始化程序在float f 123456e 3 是否需要有一个f suffix 默认情况下 所有浮点文字
  • 节点Hmac认证

    我对认证过程的理解 主机创建一个secret and a public api key 客户端借助密钥对有效负载进行加密 这就是签名 然后将其公钥 有效负载 签名发送给主机 示例客户端 https github com bitfinexco
  • viewModelScope 未取消

    看完后Sean 对 Android 的解释 Google I O 19 https youtu be BOHK w09pVA t 1425我也尝试过同样的操作 init viewModelScope launch Timber i coro
  • 在替换迭代器中使用未初始化值 $ARGV[1]

    我正在尝试运行我编写的这个程序 但不断收到一条错误消息 其中指出以下内容 在替换迭代器中使用未初始化值 ARGV 1 replaceName pl 第 22 行 因为该值是从命令行传递的名称 并且是第二个参数 所以我不确定出了什么问题 us
  • android selectableItem背景选择

    我想在状态 激活 时更改视图的背景 并且我想保留以下效果 波纹 attr selectableItemBackground 是否可以扩展或组合选择器 attr selectableItemBackground 您可以使用LayerDrawa
  • 以编程方式更改应用程序 Dock 图标 javaFX

    我有一个只能从 JAR 加载的 javaFX 应用程序 但我想更改 mac 扩展坞中的图标 我已经成功地在 Windows 上解决了这个问题 我正在使用 Netbeans IDE 并且不想添加额外的 Apple JAR 扩展文件 正因为如此
  • Django1.4:在模板中设置语言链接以使用 i18n_patterns 的通用方法?

    我开始使用 Django 1 4 中的新 i18n patterns 基本上 我希望在所有模板标题上都有我支持的每种语言的语言链接 我已将标头实现为包含在其他模板中的单独模板 有没有办法让我的标头保持通用并解决此问题 而无需在模板上下文中传
  • 使用 dplyr::mutate() 在列子集上按行 cor()

    set seed 8 df lt data frame A sample c 1 3 10 replace T B sample c 1 3 10 replace T C sample c 1 3 10 replace T D sample
  • 找不到模块 jest-sequencer-@jest/test-sequencer

    我正在尝试在 VSCode 中调试 Jest 测试 但它无法解析某些模块 我设置了一个断点jest run下面被称为argv runInBand no cache watchAll false config roots
  • 如何为 Maven 设置 Archiva 内部+快照存储库?

    我们正在尝试使用 Archiva 作为中央和其他外部存储库的 Maven 代理 同时也作为我们的工件的快照存储 这些工件由 Hudson 从 SVN 自动构建并安装到快照存储库 我无法将 Maven 客户端设置为同时使用内部存储库和快照存储
  • 如何在首页加载时执行 JavaScript 函数?

    我想知道是否有一种方法可以只在第一次页面加载时执行一次 JavaScript 函数 然后在任何后续重新加载时都不执行 我有办法做到这一点吗 下面的代码将在以下代码执行一次onload https developer mozilla org
  • MKMapView 因 EXC_BAD_ACCESS 崩溃

    我有以下激活断点的代码行 mapView addAnnotations grabinstance itemArray 这随机崩溃 rabinstance itemArray 始终被完全填充 并且当时永远不会改变 因为只有在数组已满时才会调用
  • 使用 AngularJS 观察下拉菜单的所选项目不起作用

    跟进自AngularJS 为什么我的手表不工作 https stackoverflow com questions 16486634 why my angularjs watch is not working function myCont
  • JavaScript 中的原始包装器行为

    在书里面向 Web 开发人员的专业 Javascript我读到 当尝试访问原始对象的属性和方法时 JavaScript 在内部使用原始包装器 这是否意味着每次我尝试访问字符串基元上的长度属性时 都会重新计算该值 我的直觉告诉我 由于字符串是
  • 检查图像和线条之间的碰撞

    我检查碰撞 offset x0 x1 y0 y1 result player1 mask overlap player2 offset 它在两个图像之间工作 但如果我想检查图像和pygame draw line I use it https