我正在使用名为Pixel的简单渲染框架在Go语言的游戏中实现圆形碰撞。
碰撞与形状像画圆一样很好
但是当我尝试将其用于图像而不是渲染的形状时,它认为它在到达图像之前会发生轻微碰撞。图片越大,误差越大。
在这里它与图像碰撞:
碰撞是这样完成的:
[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)
}
形状也是基于其中心绘制的。
答案 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
边尺寸时会发生碰撞情况)