ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-15 11:57:31  阅读:189  来源: 互联网

标签:python circle pygame collision


我正在进行碰撞检测程序,其中我的光标是一个半径为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,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),True,colour("white"))
    display.blit(xy,[5,285])
    display.blit(hitTxt,[270,285])

    p.display.update()

解决方法:

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

标签:python,circle,pygame,collision
来源: https://codeday.me/bug/20190715/1467403.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有