Pygame 精准检测图像碰撞的问题

在用Pygame写游戏的时候,有人可能会遇到两个Rect对象碰撞但是对象之间还有空间间隔的问题,这里,将教大家用一种方法精准地检测图像碰撞。

假设我们有两个图像(类型为Surface):surface1,surface2

首先,获得这两个surface对象的rect:

rect1=surface1.get_rect()
rect2=surface2.get_rect()

然后,获取它们对应的mask对象,用pygame.mask.from_surface()方法,使用如下:

pygame.mask.from_surface(surface)

填入的是Surface对象,返回Mask对象

代码如下:

mask1=pygame.mask.from_surface(surface1)
mask2=pygame.mask.from_surface(surface2)

接下来,进行碰撞检测,我们需要用到overlap方法,使用如下:

mask.overlap(other,offset)

mask是一个Mask对象

other是另外一个Mask对象

offset是一个元组,元组中分别为两个rect的x坐标插值和y坐标插值

返回值有两种,如果是一个元组就说明已经碰撞,如果为None就说明没有碰撞

代码如下:

offset=abs(rect1.x-rect2.x),abs(rect1.y-rect2.y)
if rect1.overlap(rect2,offset)!=None: # 已经碰撞
    print("已经碰撞")

以上代码只是示例,可供参考,命名不需要和上方一致,符合命名规范就行

到此这篇关于Pygame 精准检测图像碰撞的文章就介绍到这了,更多相关Pygame 检测碰撞内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Pygame中精灵和碰撞检测详解

    Pygame精灵和碰撞检测 今天来看看python最出名的游戏库pygame.学习两个名词:精灵和碰撞检测. 精灵英文字母是Sprite.Sprite是二维的图形,在游戏中可以用做各种物品,例如人物,道具,反正所有一切展现在游戏图像中的都可以用Sprite. 而碰撞检测就是检测两个Sprite之间是否有碰撞.例如游戏中的吃金币,吃豆豆,打敌人都可以用到碰撞检测. class Sprite(pygame.sprite.Sprite): def __init__(self, pos): pygame

  • 利用pygame完成动画精灵和碰撞检测

    动画精灵和碰撞检测 一.动画精灵 动画精灵:四处移动的单个图像或图像部分称为动画精灵(sprite),pygame有一个特殊的模块帮助跟踪屏幕上移动的大量图像.利用这个模块,可以更容易地移动图形对象. 具备特征: 图像(image):为动画精灵显示的图片. 矩形区(rect):包含动画精灵的矩形区域. ①.一堆沙滩球都反弹 Pygame 的 sprite 模块提供了一个动画精灵基类Sprite,基于pygame.sprite.Sprite 来创建自己的子类. 这里用了常规的python列表 im

  • python飞机大战pygame碰撞检测实现方法分析

    本文实例讲述了python飞机大战pygame碰撞检测实现方法.分享给大家供大家参考,具体如下: 目标 了解碰撞检测方法 碰撞实现 01. 了解碰撞检测方法 pygame 提供了 两个非常方便 的方法可以实现碰撞检测: pygame.sprite.groupcollide() 两个精灵组 中 所有的精灵 的碰撞检测 groupcollide(group1, group2, dokill1, dokill2, collided = None) -> Sprite_dict 如果将 dokill 设

  • Pygame如何使用精灵和碰撞检测

    在开始学习相关知识点之前,我们有必要先学习精灵和碰撞检测的含义. 精灵(英文译为 Sprite),其实在一个游戏程序中,精灵本质指的是一张张小尺寸的图片,比如游戏中的各种道具.人物.场景装饰等,它们都可以看做成一张张小的"精灵"图.除此之外,人物的移动也可以看做是一系列小精灵图构成的序列(按帧组成的序列),如下图所示: 图1:动作逐帧分解图 如果将逐帧分解后的动作,按照一定的频率播放,那么就形成了动画精灵,您将会看到雄鹰展翅高飞.人在策马奔腾.运动员奋力跳远. 精灵有个特点就是允许精灵

  • Pygame 精准检测图像碰撞的问题

    在用Pygame写游戏的时候,有人可能会遇到两个Rect对象碰撞但是对象之间还有空间间隔的问题,这里,将教大家用一种方法精准地检测图像碰撞. 假设我们有两个图像(类型为Surface):surface1,surface2 首先,获得这两个surface对象的rect: rect1=surface1.get_rect() rect2=surface2.get_rect() 然后,获取它们对应的mask对象,用pygame.mask.from_surface()方法,使用如下: pygame.mas

  • 一文详解pygame.sprite的精灵碰撞

    目录 前言 pygame.sprite.Sprite - 可见游戏对象的简单基类. pygame.sprite.Group - 用于保存和管理多个 Sprite 对象的容器类. pygame.sprite.spritecollide() - 在与另一个精灵相交的组中查找精灵 总结 前言 pygame中的精灵碰撞是可见游戏中用的最基础的东西,这里结合官方文档和小甲鱼的网站上的内容做个小总结,方便日后使用. pygame.sprite.Sprite - 可见游戏对象的简单基类. Sprite(*gr

  • javascript canvas检测小球碰撞

    本文实例为大家分享了javascript canvas实现检测小球碰撞的具体代码,供大家参考,具体内容如下 定义一个canvas标签 <div class="cnavasInfo"> <canvas id="canvas" width="800" height="500" ></canvas> </div> 函数以及相关的逻辑处理 export default { data()

  • 使用OpenCV检测图像中的矩形

    本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现. 2.我这里使用的OpenCV版本是3.30. 矩形检测 1.得到原始图像之后,代码处理的步骤是: (1)滤波增强边缘. (2)分离图像通道,并检测边缘. (3) 提取轮廓. (4)使用图像轮廓点进行多边形拟合. (5)计算轮廓面积并得到矩形4个顶点. (6)求轮廓边缘之间角度的最大余弦. (7)画出矩形. 2.代码 //检测矩形 //

  • Python OpenCV基于霍夫圈变换算法检测图像中的圆形

    目录 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + opencv 完整检测代码 ① 源代码 ② 运行效果图 第一章:霍夫变换检测圆 ① 实例演示1 这个是设定半径范围 0-50 后的效果. ② 实例演示2 这个是设定半径范围 50-70 后的效果,因为原图稍微大一点,半径也大了一些. ③ 霍夫变换函数解析 cv.HoughCircles() 方法 参数分别为:image.method.dp.minDist.param1.param2.mi

  • 基于Python利用Pygame实现翻转图像

    目录 前言: 1.垂直翻转图像 2.水平方向翻转图像 前言: 要翻转图像,我们需要使用pygame.transform.flip(Surface, xbool, ybool) 方法,该方法被调用来根据我们的需要在垂直方向或水平方向翻转图像. 语法: pygame.transform.flip(Surface, xbool, ybool) 原始图像如下: 1.垂直翻转图像 我们在垂直方向上翻转图像.我们将使用 pygame.transform.flip() 来垂直显示图像.将 xbool 作为 T

  • Pygame Surface创建图像的实现

    通过前面内容的介绍,我们对 Surface 对象有了大体上的认识.Pygame 针对文本.图像.颜色提供了不同模块来生成它们各自的 Surface 对象.Surface 模块是Pygame 中专门用来新建图像的,通过该模块可以创建一个 Surface 对象,语法格式如下: Surface=pygame.Surface(size=(width,height),flags,depth) 参数函数如下: size:表示 Surface 对象的矩形区域大小: flags:功能标志位,有两个可选参数值 H

  • Python pygame绘制游戏图像

    目录 前言 1. 理解图像并实现图像绘制 2. 代码演练-绘制背景图像 3. 代码演练-绘制英雄图像 前言 本节,我们将使用pygame模块完成飞机大战游戏的实战开发,飞机大战游戏的简要概括如下: 把一些静止的图像绘制到游戏窗口中 根据用户的交互或其他情况,移动这些图像,产生动画效果 根据图像之间是否发生重叠,判断敌机是否被摧毁等其他情况 1. 理解图像并实现图像绘制 在游戏中,能够看到的游戏元素大多都是图像,图像文件初始是保存在磁盘上的,如果需要使用,第一步就需要被加载到内存. 要在屏幕上看到

  • 使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    介绍 硕士阶段的毕设是关于昆虫图像分类的,代码写到一半,上周五导师又给我新的昆虫图片数据集了,新图片中很多图片很大,但是图片中的昆虫却很小,所以我就想着先处理一下图片,把图片中的昆虫裁剪下来,这样除去大部分无关背景,应该可以提高识别率. 原图片举例(将红色矩形框部分裁剪出来)): step1:加载图片,转成灰度图 image = cv2.imread("353.jpg") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) step2:用Sob

  • ​Python使用Mediapipe对图像进行手部地标检测

    目录 概述 行业用例 导入库 使用Mediapipe初始化手的地标检测模型 读取图像 执行手部地标检测 在图像上绘制地标 结论 尾注 概述 在本文中,我们将以深度库即 Mediapipe为基础库,以及其他计算机视觉预处理的CV2库来制作手部地标检测模型.市场上有很多关于这种问题的用例,例如商业相关的虚拟现实.游戏部分的实时体验. 行业用例 智能家居:这是计算机视觉的现代用例之一,人们使用智能家居来过上更舒适的生活,这就是为什么它不再是一个小众领域,它也正在蔓延到普通家庭. 智能电视:我们经常看到

随机推荐