我想使用 Collidable 接口实现一个碰撞库
type Collidable interface{
BoundingBox() (float64,float64,float64,float64)
FastCollisionCheck(c2 Collidable) bool
DoesCollide(c2 Collidable) bool
Collide(c2 Collidable)
}
它具有预定义的形状,例如。
type Circle struct{
X,Y,Radius float64
}
这个想法是我可以做到
type Rock struct{
collision.Circle
....
}
然后实现了 Collidable 接口,所以我可以将它传递给一个空间哈希映射(期望一个可碰撞的)。唯一需要做的就是根据我的需要覆盖 Collide() 函数。
但是type circle中的函数不能处理type rock,即使是强硬的它嵌入了一个圆圈。
func (c1 *Circle) DoesCollide(i Collidable) bool{
switch c2 := value.(type) {
case Circle:
//doesn't fire, as it is of type Rock (unknown in this package)
//Needed is something like
//if i_embeds_Circle then c2 := i_to_Circle
}
}
这可能吗?有没有更好的办法?
墨色风雨
相关分类