游戏设计模式 - 观察者模式
给出一个例子: 小球砸在地面,达成一个成就“蛋疼”。砸在地面,听起来是需要物理引擎参与吧,但我们总不能在物理引擎计算各种力学公式的时候强行插入一个unlockEggPain()方法吧,观察者模式就出来有话说了。 def undateEntity(entity): entity.accelerate(GRAVITY) entity.update() if entity.IsOnSurface(): notify(entity, EVENT_ON_FACE) 这里,我们实现了某个东西砸在地上了,感兴趣的人自行关注。 成就系统就可以注册自己进去,收到信息后检查是否和自己相关,有则进行运算,否则抛弃。这样成就系统和物理系统没进行耦合,任何一方的存亡也没另一边的关系。 如何实现: 定义观察者 class ObSever: def onNotify(entity, event): pass 继承obsever即可成为观察者,就是那么简单。 class Achievents(Obsever): def onNotify(entity, event): if event == EVENT_ON_FACE: self.Unlock(ACHIEVENT_EGG_PAIN) elif xxx: pass 此外,还得定义被观察的对象,称为客体 class Subject: def