我游戏中的圆形碰撞比图像略大
Circular collision in my game slightly larger than the image
我正在使用名为 Pixel 的简单渲染框架在我的 Go 游戏中实现循环碰撞。
碰撞在 形状 下效果很好,就像绘制的圆
但是当我尝试将它用于图像而不是渲染形状时,它认为它在到达图像之前会发生轻微碰撞。图片越大,误差越大
这是它在图像上发生碰撞的地方:
较小的图像:
大图:
碰撞是这样完成的:
[s 是太阳能电池板,在 "smaller image" 中看到,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 是生成器,见 'Larger image'
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
的 size/radius?
这两个原因可能共同导致所描述的行为(当 center-center 距离等于 s
边尺寸时碰撞条件触发)
我正在使用名为 Pixel 的简单渲染框架在我的 Go 游戏中实现循环碰撞。
碰撞在 形状 下效果很好,就像绘制的圆
但是当我尝试将它用于图像而不是渲染形状时,它认为它在到达图像之前会发生轻微碰撞。图片越大,误差越大
这是它在图像上发生碰撞的地方:
较小的图像:
大图:
碰撞是这样完成的:
[s 是太阳能电池板,在 "smaller image" 中看到,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 是生成器,见 'Larger image'
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
的 size/radius?
这两个原因可能共同导致所描述的行为(当 center-center 距离等于 s
边尺寸时碰撞条件触发)