是否可以重构以下代码以消除重复?我希望我的 GameObject 实现调用不同更新处理程序(如我的“AfterUpdate”)的“更新”任务的逻辑。当前版本有效,但“更新”有两种实现,它们是相同的。在 GameObject 上调用的 AfterUpdate 应该对其属性进行操作,在 HeroGameObject 上调用的 AfterUpdate 应该可以访问 HeroGameObject 的属性(例如“health”)。我可以做什么更好?谢谢你。package mainimport "fmt"type Point struct { x, y int}///////////////////////type GameObject struct { Point title string status int ticks float32 spriteIndex int}func (g *GameObject) Update() { if g.ticks == 0 { g.spriteIndex++ g.AfterUpdate() }}func (g *GameObject) AfterUpdate() { g.status = 0 //suppose it does something meaningful fmt.Println("GameObject afterUpdate handler invoked")}///////////////////////type HeroGameObject struct { GameObject health float32}func (h *HeroGameObject) Update() { if h.ticks == 0 { h.spriteIndex++ h.AfterUpdate() }}func (h *HeroGameObject) AfterUpdate() { h.health-- //suppose it does something meaningful but *different*, using its own properties, for example "health" fmt.Println("HeroGameObject afterUpdate handler invoked")}///////////////////////func main() { gameObject := &GameObject{ Point: Point{ x: 0, y: 0, }, title: "dummy object", status: 0, ticks: 0, spriteIndex: 0, } heroObject := &HeroGameObject{ GameObject: GameObject{ Point: Point{ x: 0, y: 0, }, title: "hero object", status: 0, ticks: 0, spriteIndex: 0, }, health: 0, } gameObject.Update() heroObject.Update()}输出:调用游戏对象 afterUpdate 处理程序调用 HeroGameObject afterUpdate 处理程序
1 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
像这样使用标志函数和基本接口怎么样?
type BaseGameObject interface {
Ticks() int
IncSpriteIndex()
AfterUpdate()
}
func UpdateGameObject(o BaseGameObject) {
if o.Ticks() == 0 {
o.IncSpriteIndex()
o.AfterUpdate()
}
}
func (o *GameObject) Ticks() int {
return o.ticks
}
func (o *GameObject) IncSpriteIndex() {
o.spriteIndex++
}
- 1 回答
- 0 关注
- 138 浏览
添加回答
举报
0/150
提交
取消