pygame碰撞检测

最近在学Pygame,花一段时间做了一个异常简陋版的"打砖块".

pygame碰撞检测

 

这次重点说一下困扰我比较长时间的碰撞检测(个人太菜..).

按照网上教程比较普遍的方法(也可能是我没看见别的),碰撞检测依次计算移动物体与被碰撞物体各个边之间坐标是否相交.例如下列代码,检测小球与窗口的碰撞:

def baffleJudge(self):'''与墙壁之间的碰撞判断'''if self.vector.x > WINDOW_X - self.image.get_width():self.vector.x = WINDOW_X - self.image.get_width()elif self.vector.x < 0:self.vector.x = 0

 

 计算小球的x值是否大于(小于)两侧边际的坐标.

可是,因为这种方法由于需要加减各种数值,很容易多加一个少减一个,出现乱七八糟的错误.所以我想了一种相对简便些的方法(后来看空间解析的书知道是变量的加减).

原理很简单:

pygame碰撞检测

 

检测A,B两个矩形(图片均为矩形)是否碰撞,只要检测两个矩形x轴集合之间,y轴的集合之间是否相交即可,也就是:(Xa1:Xa2) 与(Xb1:Xb2)之间, (Ya1:Ya2)与(Yb1:Yb2)之间是否相交.

代码如下:

 1 def xy(self):
 2         '''
 3         x1:上,x2:下
 4         y1:左,y2:右
 5         :return:
 6         '''
 7         x1 = int(self.vector.x)
 8         x2 = int(x1 + self.width)
 9         y1 = int(self.vector.y)
10         y2 = int(y1 + self.height)
11         return(range(x1,x2+1),range(y1,y2+1))
12 
13     def cross(self, a, b):
14         '''
15         判断两个集合是否相交
16         :return:相交返回True
17         '''
18         for each in a:
19             if each in b:
20                 return True
21         return False
22 
23     def impactJudge(self, objects):
24         '''
25         碰撞测试
26         :param objects:
27         :return:
28         True:碰撞成立
29         '''
30         self.listX,self.listY = self.xy()
31 
32         if(self.cross(self.listX, objects.listX) and    #两物体x轴集合相交
33            self.cross(self.listY, objects.listY)):      #两物体y轴集合相交
34             return True
35         else:
36             return False

 

impactJudge()小球类的方法,object则为与小球相撞的物体.若检测两组集合均相交则证明两图形碰撞成立.           大概就是这样,如果有错误请不吝赐教pygame碰撞检测

PS:最近看一本书上讲到通过绘制蒙版,进而通过颜色来检测碰撞的,准备试验一下.

转载于:https://www.cnblogs.com/elninov/p/4526968.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2017-5-4 进程

进程&#xff1a;一个应用程序就是一个进程开启某个进程Process.Start("文件缩写名");通过绝对路径开启某个进程Process p new Process();p.StartInfo new ProcessStartInfo("要打开的程序绝对路径");p.Start(); 获取全部开启的进程&#xff1a;Process.…

很有用的cv牛人的网址和主要贡献

CV人物1&#xff1a;Jianbo Shi史建波毕业于UC Berkeley&#xff0c;导师是Jitendra Malik。其最有影响力的研究成果&#xff1a;图像分割。其于2000年在PAMI上多人合作发表"Noramlized cuts and image segmentation"。这是图像分割领域内最经典的算法。主页&#xf…

c++分治法求最大最小值实现_程序员:算法导论,分治法、归并排序,伪代码和Java实现...

分治法我们首先先介绍分治法。分治法的思想&#xff1a;将原问题分解为几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题&#xff0c;然后在合并这些子问题的解来解决原问题的解。还是拿扑克牌举例子&#xff0c;假设桌上有两堆牌面朝上的牌(牌面朝上&…

菜根谭#82

风来疏竹&#xff0c;风过而竹不留声&#xff1b;雁度寒潭&#xff0c;雁去而潭不留影&#xff1b;故君子事来而心始现&#xff0c;事去而心随空。 转载于:https://www.cnblogs.com/star4knight/p/3604403.html

解读ASP.NET 5 MVC6系列(9):日志框架

解读ASP.NET 5 & MVC6系列&#xff08;9&#xff09;&#xff1a;日志框架 原文:解读ASP.NET 5 & MVC6系列&#xff08;9&#xff09;&#xff1a;日志框架框架介绍 在之前的.NET中&#xff0c;微软还没有提供过像样的日志框架&#xff0c;目前能用的一些框架比如Log4N…

2017第18周四

继续加班中&#xff0c;很多事不如预期。时间花费很多但效果不成比例。越忙落下的事越多&#xff0c;有时候还需要让自己静下来想想&#xff0c;到底有什么是重要的。集中精力放在重要的哪些事&#xff0c;尽自己最大努力即可&#xff0c;尽最大努力即使没有达到也可以没有遗憾…

halcon相关的链接

论坛、培训 halcon学习网&#xff1a;http://www.ihalcon.com/鸟叔机器视觉&#xff1a;http://bbs.szvbt.com/forum.php 博客 韩兆新的博客园majunfuLife and Codingzhaojun的博客風韻無聲骑蚂蚁上高速的博客小马_xiaoLV2小新识图程序园-程序员的世界章柯渊的博客 注&…

[转]Java8-本地缓存

这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存。因为Map有一个新的方法可以在key为Null的时候自动计算一个新的value值。非常完美的实现cache。来看下代码&#xff1a; public static void main(String[] args) {for (int i 0; i < 10; i)Syst…

python opencv图像处理程序_Python-OpenCV学习(四):基本图像处理

转载请注明出处&#xff1a;danscarlett的博客园 参考资料&#xff1a; 目录&#xff1a; 读取 imread 显示 imshow 存储 imwrite 缩放 resize 加边框 copyMakeBorder 裁剪 img[x_start:x_end,y_start:y_end] 1.图像读取&#xff1a; cv2.imread(fileName,flagsNone) 函数功能&…

Java进程占用CPU资源过多分析

问题描述&#xff1a; 生产环境下的某台tomcat7服务器&#xff0c;在刚发布时的时候一切都很正常&#xff0c;在运行一段时间后就出现CPU占用很高的问题&#xff0c;基本上是负载一天比一天高。 问题分析&#xff1a; 1&#xff0c;程序属于CPU密集型&#xff0c;和开发沟通过&…

分针网——怎么轻松学习JavaScript

js给初学者的印象总是那么的“杂而乱”&#xff0c;相信很多初学者都在找轻松学习js的途径。我试着总结自己学习多年js的经验&#xff0c;希望能给后来的学习者探索出一条“轻松学习js之路”。js给人那种感觉的原因多半是因为它如下的特点&#xff1a;A&#xff1a;本身知识很抽…

MATLAB中floor、round、ceil、fix区别

Matlab取整函数有: fix, floor, ceil, round.具体应用方法如下&#xff1a;fix朝零方向取整&#xff0c;如fix(-1.3)-1; fix(1.3)1;floor&#xff0c;顾名思义&#xff0c;就是地板&#xff0c;所以是取比它小的整数&#xff0c;即朝负无穷方向取整&#xff0c;如floor(-1.3)-2…

python时间序列分析航空旅人_用python做时间序列预测一:初识概念

利用时间序列预测方法&#xff0c;我们可以基于历史的情况来预测未来的情况。比如共享单车每日租车数&#xff0c;食堂每日就餐人数等等&#xff0c;都是基于各自历史的情况来预测的。 什么是时间序列&#xff1f; 时间序列&#xff0c;是指同一个变量在连续且固定的时间间隔上…

解决mysql不能远程登入的问题

mysql远程不能登入&#xff0c;问题就在于当时设置的账号只限制本地访问&#xff0c;mysql默认也只是本地访问。之前的设置&#xff1a; 通过命令行登录管理MySQL服务器&#xff08;提示输入密码时直接回车&#xff09;&#xff1a; mysql> /usr/local/webserver/mysql/bin/…

ASCII码、HEX、字符、BCD 等等 基础知识思考

每每遇到这些问题就要想个半天&#xff0c;想不明白还不舒服&#xff0c;今天特别把所想整理下避免以后再次进入思想漩涡&#xff01;&#xff01;&#xff01;计算机存储和传输都是以字节为单位 1 bit 1 二进制数据 1 byte 8 bit 1 字母 1 by…

[Logstash-input-redis] 使用详解

2019独角兽企业重金招聘Python工程师标准>>> Redis插件参数配置详解 工作流程 logstash启动redis插件redis插件获取参数&#xff0c;进行校验工作判断监听模式(list,channel,pattern_channel等)&#xff0c;根据不同的监听模式创建监听任务创建redis实例&#xff0c…

雅可比旋转求解对称二维矩阵的特征值和特征向量

问题描述&#xff1a; 给定一个矩阵&#xff0c;如下&#xff1a; A[a11a21a12a22]A=\begin{bmatrix} a_{11}&a_{12}\\ a_{21}& a_{22} \end{bmatrix} 其中满足a12a21.也就是所谓的 对称矩阵。那么如何求解此矩阵的特征值以及特征向量呢&#xff1f;这里我们要用到 …

游戏场景灯光烘焙

【LV4】北京 天杀神(153478394) 10:21:15可能是我找的截图不好 我就是想问下 一般要烘焙这样的一个场景的步骤是什么 【LV5】北京地编&#xff5e;mr(274380109) 10:21:44首先就看原画的色调 确定一个环境光如果是晴天 就打一个直光 给阴影 直光不要太亮 【LV5】北京地编&a…

python画图数据的平均值怎么算的_Python气象数据处理与绘图(2):常用数据计算方法...

对于气象绘图来讲&#xff0c;第一步是对数据的处理&#xff0c;通过各类公式&#xff0c;或者统计方法将原始数据处理为目标数据。 按照气象统计课程的内容&#xff0c;我给出了一些常用到的统计方法的对应函数&#xff1a; import numpy as np 平均值 在计算气候态&#xff0…

Linux下nginx安装与配置

部分Linux发布版的默认安装已经集成了nginx&#xff0c;查看方法ls /usr/local&#xff0c;若已有nginx文件夹说明已集成。nginx依赖库pcre与zlib&#xff0c;且pcre依赖于gcc与gcc-c&#xff0c;因此安装步骤为&#xff1a;安装gcc与gcc-c库安装pcre库安装zlib库安装nginx详细…