比方说,我正在制作一个类似游戏引擎的东西.
我需要一个GameObject struct ,它定义了一些事件处理程序:
type GameObject struct {
transform Transform
animatedMesh AnimatedMesh
updateHandler func(self GameObjectGetter)
onCreateHandler func(self GameObjectGetter)
onDestroyHandler func(self GameObjectGetter)
}
func (g GameObject)getGameObject() GameObject {
return g
}
type GameObjectGetter interface {
getGameObject() GameObject
}
然后,当我初始化一些具体的GameObject时,我想将一个处理程序定义为一个定制函数:
g.updateHandler = func(self FishGameObject) { // Error here
self.tailMotionSpeed = self.boid.acceleration.Normalize().Len()
}
请注意,tailMotionSpeed
和boid
不是GameObject的成员.它们是 struct FishGameObject
的成员, struct FishGameObject
具有一些自定义属性和匿名游戏对象:
type FishGameObject struct {
leftFinPosition float32
rightFinPosition float32
tailMotionSpeed float32
boid Boid
GameObject
}
如果我将参数指定为GameObjectGetter,我会得到一个错误self.tailMotionSpeed undefined (type GameObjectGetter has no field or method tailMotionSpeed)
,如果我将参数指定为FishGameObject,我也会得到一个错误cannot use handler (variable of type func(self FishGameObject)) as func(self GameObjectGetter) value in struct literal
.我做什么好?