摘要:
但是随着我们对游戏表现力要求的提高,我们不再满足于仅仅按设定好的参数回放特效效果,而是希望特效表现与游戏逻辑挂钩,使某些特效元素的某些参数随着游戏逻辑动态变化。比如我们有一个发动机尾烟的特效,其中有一个白烟粒子系统,一个黑烟粒子系统和一个公告板。我们希望让这个特效的表现对应于一个逻辑变量“强度”,它是一个浮点数,用fPower来表示。我们希望随着强度不同白烟粒子系统的发射速度会变化,黑烟粒子系统的大小和生命期会变化,公告板的大小和透明度会变化。面对这样的需求最直接能想到的解决方案就是提供一种可以遍历特效内部所有元素的方法,遍历过程中根据元素的不同类型反回不同的接口,然后调用这些接口修改不同元素的不同参数。遗憾的是这个方法很差劲,怎么想都不够好,举出两个最致命的缺点,一是要开放大量设置元素内部状态的接口函数,二是根据fPower设置特效元素参数的代码必须非常了解这个特效的内部结构,它要知道那个粒子系统是白烟,哪个是黑烟,哪个是公告板,哪些元素是不相干的。
阅读全文