近期在公司原来的游戏框架上做二次开发,这个时候遇到要用到贝塞尔曲线来做相对光滑的曲线路径。一开始想到的是在Update函数里面,不断对现在的位置用3阶贝塞尔曲线公式来迭代计算位置。但是这个想法总是觉得不对。于是问了一下同事,同事说,用3阶的贝塞尔公式本身计算量还是挺大的,而且一个路径要不断迭代一次,那要是几个路径一起更新,那么CPU就要计算很多次,这样会导致性能很差。这个时候,他就提到了用缓存池。回想游戏的大框架,很多看起来几乎不会这么变化的,比如资源图片啊,一些固定的点啊,都是用缓存池来做的,这样资源的利用率就会很高。
所以改变之前的想法,现在想法是,先开辟一定数量的空路径对象,在需要用到的时候,就从开辟的缓存里面获取一个没有被使用过的路径,根据需要,赋予这个路径4个最初的点,这个最初的点被保存在路径对象里面,这个时候,路径对象就可以开始利用这个4个基本点来计算。这个计算,是要在事先计算好的,用3阶贝塞尔的公式,拟定要计算10个中间点,计算出这些点,就是这些曲线上的点就能装在路径对象的vector容器里面。绑定这个路径,在要运动这个路径的对象里面,设置计算出来的曲线的各个点为目标点,然后按速度不断运动到目标位置,这样,看起来也就是像一条曲线了。这种做法,很好解决了一个问题,就是在曲线拟合的时候,如果仅仅是不断在Update函数里面,迭代计算运动对象每一步的位置,现在可以在运动曲线路径的时候,任意的加减速度,使运动看起来更加的灵活。
看来还是能学到东西的~~~加油哦!每天向前走一小步,我终究要成为我自己心目中想成为的那个优秀的人!
贝塞尔曲线参考网站: http://blog.163.com/my_appy@126/blog/static/118323971200953061819702/