c++ - 如何创建圆形碰撞检测? C++

标签 c++ directx 2d transformation vector-graphics

您好,我想知道如何创建一个同时充当传感器的圆形碰撞。例如,当玩家进入敌人的圈子半径时,敌人就会开始追击玩家。 根据我的尝试,我只使用了一个碰撞盒,它是 RECT SpriteRect。但这对于圈子来说不够准确。我正在考虑通过使用 D3DXVECTOR2 来使用 vector ,但我不擅长转换。请帮助我如何实现这一点.. enter image description here

最佳答案

点 (xa, ya) 是否在半径为 r 的 (xc, yc) 圆内?

还记得毕达哥拉斯吗? - 它确定两点之间的距离,您需要确定某物是否在给定半径的圆内,就是确定到圆心的距离是否小于半径:

bool IsPointInCircle(float xa, float ya, float xc, float yc, float r)
{
   return ((xa-xc)*(xa-xc) + (ya-yc)*(ya-yc)) < r*r;
}

两个圆之间的碰撞检测同样简单,您只需将“r”作为两个圆的半径之和即可。因为,这将是圆接触时两个中心之间的距离。

要进行正方形和圆形之间的碰撞检测,您需要计算线到点的距离。圆形几乎是最容易进行碰撞检测的形状。

关于c++ - 如何创建圆形碰撞检测? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342362/

相关文章:

c++ - 冲突声明(外部基础与派生)

go - 如何在 2d 游戏中处理全屏?

c++ - OpenGL同时绘制2D和3D

c++ - 为什么 MessageBox 会默默地失败?

c++ - 验证整数输入 C++?

c++ - 在类定义中调用成员构造函数

c++ - IMFTransform::ProcessInput() "The buffer was too small to carry out the requested action."

c# - 防止屏幕捕获软件捕获应用程序屏幕

visual-studio-2012 - 使用 Direct X 和 VS2012

java - LinkedList<LinkedList<String>> 并排输出元素?