我游戏中的圆形碰撞比图像稍大

时间:2019-05-16 05:20:51

标签: 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)
}

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

1 个答案:

答案 0 :(得分:1)

如果两个碰撞对象都是半径为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边尺寸时会发生碰撞情况)