最简单的方法用 if else。
我用过的方法,命令模式和状态机来解决:1.抽象出特效类或者接口,然后运用命令模式(把一个特效看做一个命令),把特效的显示逻辑放在子类中(闪电类、火球类)实现。2.把所有特效作用于角色的逻辑放在一个模型类中实现(EffectModel),该类同时也是单例。该类负责接收和处理特效类发来的消息,同时存储特效作用于角色的状态(可以注册一个状态机),根据状态执行特效作用于角色的逻辑。3.当任何特效和角色发生碰撞时,直接用命令的指针执行特效逻辑就好。然后特效逻辑执行的同时给EffectModel发送消息,EffectModel处理消息,然后将逻辑作用于角色。