- 给 OPPO 手机做的优化
- 具体优化方案
- 手动调用优化代码
给 OPPO 手机做的优化
该优化代码只在 Cocos2d-x 3.17.2 及以上的版本起效,并且目前只在 OPPO Reno 有效果。
具体优化方案
引擎内部在两个地方添加了优化代码:
- 场景加载
- 编译引擎内置的 shader 脚本场景加载指的是从
Scene创建到Scene::onEnter()被调用这段时间,所以加载资源的代码要放在Scene::onEnter()前,且需要在Scene创建后马上进行资源加载。
手动调用优化代码
程序比引擎更清楚什么时机需要更多的 CPU、GPU 资源,因此程序代码可以在需要更多资源的地方手动掉优化代码。可以在 C++ 或 Java 调用优化代码:
C++ 的调用方式
// 通知系统某一事件发生,如场景加载开始,场景加载结束。3.17.2 之后才增加的绑定。#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROIDDataManager::setOptimise(const string&, const string&);#endif// 场景加载开始,需要更多的资源// 该接口适用于突发重负载的场景,如加载地图,GC、突发大量访问磁盘文件与数据库等#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROIDDataManager::onSceneLoaderBegin();#endif// 场景加载结束#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROIDDataManager::onSceneLoaderEnd();#endif// 开始编译 shader 脚本#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROIDDataManager::onShaderLoaderBegin();#endif// 结束编译 shader 脚本#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROIDDataManager::onShaderLoaderEnd();#endif
Java 的调用方式
Cocos2dxDataManager::setOptimise(String thing, float value);
| thing | 1 | 0 |
|---|---|---|
| load_scene | 开始加载场景 | 结束加载场景 |
| shader_compile | 开始编译 shader 脚本 | 结束编译 shader 脚本 |
V3.17.2 版本后,value 的类型由 float 变成了 string,这样就更灵活了。
thing 与 value目前默认支持上述两种方式,如果需要更加定制化的控制,需遵循手机厂商的标准才能被正确识别并生效。如在OPPO手机上,需要首先调用 setOptimise("permission", permissionIInfo),其中 permissionIInfo 需登录OPPO开放平台申请授权码,然后再传输定制的参数才会生效。具体可参考该文档。
