Cocos2d 游戏性能优化

1 影响DrawCall 因素(Cocos2d-x 3.16)

1.1 Texture 加入 CommandRender的顺序

ResourceLoader:loadSpriteFrames(ResourceManager:reward('reward'))
local nodes = {}
for i = 1, 100 do
        d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node):pos(1 * i, 100)
        d.sprite(ResourceManager:reward('#goods_floor.png')):addTo(node):pos(1 * i, 200)
end
--- DrawCall 仅仅一次
ResourceLoader:loadSpriteFrames(ResourceManager:reward('reward'))
ResourceLoader:loadSpriteFrames(ResourceManager:personalInfo("personalInfo"));
local nodes = {}
for i = 1, 100 do
         d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node):pos(1 * i, 100)
         d.sprite(ResourceManager:personalInfo("#common_Input_box_bg_2.png")):addTo(node):pos(1 * i, 200)
end
--- DrawCall 为 200

1.2 系统字体

ResourceLoader:loadSpriteFrames(ResourceManager:reward('reward'))
ResourceLoader:loadSpriteFrames(ResourceManager:personalInfo("personalInfo"));
local nodes = {}
for i = 1, 100 do
        d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node):pos(1 * i, 100)
        d.label('123', 60):addTo(node):pos(1 * i, 100)
end
--- DrawCall 为 200
local nodes = {}
for i = 1, 100 do
        d.label('123', 60):addTo(node):pos(1 * i, 100)
        d.label('123', 60):addTo(node):pos(1 * i, 100)
end
--- DrawCall 也为 200
local nodes = {}
for i = 1, 100 do
        d.label('123', 60):addTo(node):pos(1 * i, 100):enableOutline(cc.c4b(255, 0, 0, 255), 2)
end
--- DrawCall 也为 100

1.3 scale 为0

local nodes = {}
for i = 1, 100 do
     d.label('123', 60):addTo(node):pos(1 * i, 100):scale(0)
end
--- DrawCall 也为 100 界面上无显示

1.4 opacity 为0

local nodes = {}
for i = 1, 100 do
        d.label('123', 60):addTo(node):pos(1 * i, 100):opacity(0)
end
--- DrawCall 也为 100 界面上无显示

1.5 visible 为 false

local nodes = {}
for i = 1, 100 do
        d.label('123', 60):addTo(node):pos(1 * i, 100):visible(false)
end
--- DrawCall 也为 0 界面上无显示

1.6 setBlendFunc

ResourceLoader:loadSpriteFrames(ResourceManager:reward('reward'))
ResourceLoader:loadSpriteFrames(ResourceManager:personalInfo("personalInfo"));
local nodes = {}
for i = 1, 100 do
        local sp = d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node):pos(0.5 * i, 100)
        sp:setBlendFunc({src = gl.SRC_ALPHA, dst = gl.ONE_MINUS_DST_COLOR})
end
--- DrawCall 也为 1
ResourceLoader:loadSpriteFrames(ResourceManager:reward('reward'))
ResourceLoader:loadSpriteFrames(ResourceManager:personalInfo("personalInfo"));
local nodes = {}
for i = 1, 100 do
        d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node)
        local sp = d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node):pos(0.5 * i, 100)
        sp:setBlendFunc({src = gl.SRC_ALPHA, dst = gl.ONE_MINUS_DST_COLOR})
end
--- DrawCall 也为 200

1.7 屏幕的显示范围

ResourceLoader:loadSpriteFrames(ResourceManager:reward('reward'))
ResourceLoader:loadSpriteFrames(ResourceManager:personalInfo("personalInfo"));
local nodes = {}
for i = 1, 100 do
        d.sprite(ResourceManager:reward('#common_bg_list.png')):addTo(node):pos(10 * i, 100)
        d.sprite(ResourceManager:personalInfo('#common_btn_edit.png')):addTo(node):pos(10 * i, 200)
end

--- drawCall 为 163 竖屏游戏 屏幕宽为 640 * 1136
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 命令 新建项目: cocos new -l js projectname 运行项目:cocos run -p we...
    LIsPeri阅读 4,672评论 0 2
  • 部分内容参考了[大天使H5主程死肥仔在LAYA沙龙的演讲PPT],感谢主程陈策的无私分享!另外参考极光会客厅:大型...
    合肥黑阅读 9,801评论 0 9
  • 1 资源分离打包与加载 游戏中会有很多地方使用同一份资源。比如,有些界面会共用同一份字体、同一张图集,有些场景会共...
    JumboWu阅读 1,836评论 0 9
  • 罗马诗人贺拉斯曾说过,“当我们对他人感兴趣时,他人才会对我们感兴趣。”美国成功学导师卡耐基也说过,“与其花两年的时...
    记住我是喵姐阅读 162评论 0 1
  • 你有多久没跟妈妈说过谢谢了?或许你从来都没跟妈妈说过谢谢。 不知道有多少人曾经跟妈妈说过谢谢?但可能更多的人从来都...
    舒柠檬阅读 400评论 1 2