加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pygame – 两个CIRCLES的碰撞检测

发布时间:2020-12-20 12:24:09 所属栏目:Python 来源:网络整理
导读:我正在进行碰撞检测程序,其中我的光标是一个半径为20的圆,当它碰到另一个圆时应该将值更改为TRUE.出于测试目的,我在屏幕中心有一个半径为50的静止圆.我能够测试光标圆是否已经击中静止圆但是它不能正常工作,因为它实际上正在测试它是否是击中正方形而不是圆
我正在进行碰撞检测程序,其中我的光标是一个半径为20的圆,当它碰到另一个圆时应该将值更改为TRUE.出于测试目的,我在屏幕中心有一个半径为50的静止圆.我能够测试光标圆是否已经击中静止圆但是它不能正常工作,因为它实际上正在测试它是否是击中正方形而不是圆形.我对数学不是很好,我也找不到答案.我已经找到了如何测试光标是否触摸它但是从未测试过具有两个不同半径的两个对象.

如何检查两个圆圈之间的碰撞?谢谢!

这是我的代码:

#@PydevCodeAnalysisIgnore
#@UndefinedVariable
import pygame as p,sys,random as r,math as m
from pygame.locals import *
from colour import *

p.init()

w,h=300,300
display = p.display.set_mode([w,h])
p.display.set_caption("Collision Test")
font = p.font.SysFont("calibri",12)

x,y=150,150
radius=50
cursorRadius=20
count=0
hit=False

while(True):
    display.fill([0,0])
    mx,my=p.mouse.get_pos()
    for event in p.event.get():
        if(event.type==QUIT or (event.type==KEYDOWN and event.key==K_ESCAPE)):
            p.quit()

    ### MAIN TEST FOR COLLISION ###
    if(mx in range(x-radius,x+radius) and my in range(y-radius,y+radius)):
        hit=True
    else:
        hit=False

    p.draw.circle(display,colour("blue"),[x,y],radius,0)
    p.draw.circle(display,colour("white"),p.mouse.get_pos(),cursorRadius,0)

    xy=font.render(str(p.mouse.get_pos()),True,colour("white"))
    hitTxt=font.render(str(hit),colour("white"))
    display.blit(xy,[5,285])
    display.blit(hitTxt,[270,285])

    p.display.update()

解决方法

只需检查两个中心之间的距离是否小于半径之和.想象一下,两个圆圈几乎没有相互接触(见下图),然后在两个中心之间画一条线.该行的长度将是两个半径的总和(如果您是拉丁语,则为半径).因此,如果两个圆相交,它们的中心之间的距离将小于半径的总和,如果它们不相交,则它将大于总和.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读