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.pswp.cn/news/258859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258859.shtml
英文地址,請注明出處:http://en.pswp.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詳細…