go - 我游戏中的圆形碰撞比图像略大

标签 go geometry collision circular-dependency

我正在使用名为 Pixel 的简单渲染框架在我的 Go 游戏中实现圆形碰撞。

碰撞适用于形状,例如绘制的圆

但是当我尝试将它用于图像而不是渲染形状时,它认为它在到达图像之前会发生轻微碰撞。图片越大,误差越大。

这是它在图像上发生碰撞的地方:

小图: enter image description here

大图: enter image description here

碰撞是这样完成的:

[s 是太阳能电池板,在“小图”中看到,p 是播放器。]

math.Pow(math.Pow(s.center.X-p.center.X, 2)+math.Pow(s.center.Y-p.center.Y, 2), 0.5) <= s.size.X

每张图片的size.X和size.Y都是一样的,因为都是圆

中心计算正确,这条线适用于形状 [您可以在第一张图片中看到黄色轮廓,这就是它适用的形状。]

我做错了什么吗?在计算与图像本身无关的情况下,为什么会出现这样的错误?

这是图像的渲染方式,我认为问题出在某种程度上:

[g 是生成器,见“大图”

func (g Generator) render(win *pixelgl.Window, imd *imdraw.IMDraw) {
    mat := pixel.IM.
        Moved(g.center)
    g.sprite.Draw(win, mat)
}

形状也是基于它的中心绘制的。

最佳答案

如果两个碰撞物体都是半径为R1和R2的圆,则碰撞发生在

math.Pow(math.Pow(s.center.X-p.center.X, 2)+math.Pow(s.center.Y-p.center.Y, 2), 0.5) <= 
 s.radius + p.radius

什么是 s.size - 图片正方形?在这种情况下,您必须使用 size/2 来获取半径。
为什么忽略 p 的大小/半径?

这两个原因一起可能会导致所描述的行为(当中心距离变得等于 s 边大小时碰撞条件触发)

关于go - 我游戏中的圆形碰撞比图像略大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56161334/

相关文章:

go - 向 TCP 服务器发送多个请求失败

部分填充多边形网格的算法

java - 我需要帮助在 java 平台游戏中创建碰撞系统

无法读取 utmpx 文件

c - 如何在Golang(v1.3.2)中使用C库

javascript - javascript 中 Math.cos 函数将度数转换为弧度时出现问题

c# - 将对象放置在 Raycast 指向的位置,但在 Unity3D 中考虑碰撞

python - pygame中面具之间的碰撞

go - Go 中的快速排序

python - 通过有序圆形航路点的最短路径