• 给 OPPO 手机做的优化
    • 具体优化方案
    • 手动调用优化代码

    给 OPPO 手机做的优化

    该优化代码只在 Cocos2d-x 3.17.2 及以上的版本起效,并且目前只在 OPPO Reno 有效果。

    具体优化方案

    引擎内部在两个地方添加了优化代码:

    • 场景加载
    • 编译引擎内置的 shader 脚本场景加载指的是从 Scene 创建到 Scene::onEnter() 被调用这段时间,所以加载资源的代码要放在 Scene::onEnter() 前,且需要在 Scene 创建后马上进行资源加载。

    手动调用优化代码

    程序比引擎更清楚什么时机需要更多的 CPU、GPU 资源,因此程序代码可以在需要更多资源的地方手动掉优化代码。可以在 C++ 或 Java 调用优化代码:

    C++ 的调用方式

    1. // 通知系统某一事件发生,如场景加载开始,场景加载结束。3.17.2 之后才增加的绑定。
    2. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    3. DataManager::setOptimise(const string&, const string&);
    4. #endif
    5. // 场景加载开始,需要更多的资源
    6. // 该接口适用于突发重负载的场景,如加载地图,GC、突发大量访问磁盘文件与数据库等
    7. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    8. DataManager::onSceneLoaderBegin();
    9. #endif
    10. // 场景加载结束
    11. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    12. DataManager::onSceneLoaderEnd();
    13. #endif
    14. // 开始编译 shader 脚本
    15. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    16. DataManager::onShaderLoaderBegin();
    17. #endif
    18. // 结束编译 shader 脚本
    19. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
    20. DataManager::onShaderLoaderEnd();
    21. #endif

    Java 的调用方式

    1. Cocos2dxDataManager::setOptimise(String thing, float value);
    thing10
    load_scene开始加载场景结束加载场景
    shader_compile开始编译 shader 脚本结束编译 shader 脚本

    V3.17.2 版本后,value 的类型由 float 变成了 string,这样就更灵活了。

    thingvalue目前默认支持上述两种方式,如果需要更加定制化的控制,需遵循手机厂商的标准才能被正确识别并生效。如在OPPO手机上,需要首先调用 setOptimise("permission", permissionIInfo),其中 permissionIInfo 需登录OPPO开放平台申请授权码,然后再传输定制的参数才会生效。具体可参考该文档。