cocos的粒子代码赏析,如何提高性能。

今天因为粒子问题,查看了一点粒子相关代码,下面是部分的ParticleSystem中的代码 968行之后的代码。这是update中的,每次迭代中,只对对象做一次操作。不知道这样的代码如何提高性能。 想想如果有20次这样的代码,200个粒子,合并到一起,只有循环200次就可以了,分开写可是200*20=4000次的循环了。 我可以让引擎组收下我的膝盖了。随便搜了下所有的for循环关键字,这样的代码随处都是。

  //color r,g,b,a
        for (int i = 0 ; i < _particleCount; ++i)
        {
            _particleData.colorR[i] += _particleData.deltaColorR[i] * dt;
        }

        for (int i = 0 ; i < _particleCount; ++i)
        {
            _particleData.colorG[i] += _particleData.deltaColorG[i] * dt;
        }

        for (int i = 0 ; i < _particleCount; ++i)
        {
            _particleData.colorB[i] += _particleData.deltaColorB[i] * dt;
        }

        for (int i = 0 ; i < _particleCount; ++i)
        {
            _particleData.colorA[i] += _particleData.deltaColorA[i] * dt;
        }
        //size
        for (int i = 0 ; i < _particleCount; ++i)
        {
            _particleData.size[i] += (_particleData.deltaSize[i] * dt);
            _particleData.size[i] = MAX(0, _particleData.size[i]);
        }
        //angle
        for (int i = 0 ; i < _particleCount; ++i)
        {
            _particleData.rotation[i] += _particleData.deltaRotation[i] * dt;
        }

因为 for 循环中处理单个数组比 for 循环处理多个数组的性能更高

https://github.com/cocos2d/cocos2d-x/pull/13716

循环次数并不是最重要的,降低 cache miss 更有利

1赞

涨知识!

js里面不会也这样写的吧,实测js一个循环效率更高

js 和 C++ 的运行机制差异巨大,不能类比