现在一个地图几百人后 GL VERTS有2W多 GL Calls是2500 游戏很卡
游戏有缓存 有合成大图 有压缩图片
占用内存在150M左右 就是感觉渲染效率低下 所以游戏很卡 有没有大神指点下怎么优化
gl 定点数两万多,就算全部都是图片,也得3300多个精灵,做粒子呢?卡顿是必然的,GL Calls太高了,你可以调整渲树层级让引擎绘制的时候相邻glstate自动合并,但是你这定点数太多无解,你需要做一个算法优化个数或者直接截图如下
local function testRendererTex()
local plistInfo = display.loadCutomPlistImage("app/display/test1.plist")
local scene = display.getScene()
local smallLayer1 = display.newLayer(cc.c3b(0xff,0xff,0x00),display.size)
smallLayer1:addTo(scene):align(display.CENTER)
local function createSpriteTest()
for i=1,1000 do
if true then
local spr = cc.Sprite:createWithSpriteFrame(display.getCutomPlistImage(plistInfo,"btn-a-1.png"))
spr:addTo(smallLayer1):align(display.LEFT_BOTTOM,math.random( 0,500 ),math.random( 0,500))
end
end
end
local function noUseCached()
createSpriteTest()
end
-- noUseCached()
local function useCached()
local renTex = cc.RenderTexture:create(display.width,display.height, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888)
renTex:addTo(scene):align(display.CENTER)
renTex:begin()
createSpriteTest()
smallLayer1:visit()
renTex:endToLua()
smallLayer1:setVisible(false)
end
useCached()
end
testRendererTex()
不好意思才看见 我想问下 这段代码只调用一次吗?游戏中人物是移动的 我每帧调用的话 划线屏幕花屏了
RenTex不应该每帧调用(当然你也可以每帧),RenTex属于很消耗性能的API,你可以优化到0.1秒调用一次,把在0.1秒之内不变或者忽略变换的(算法统计和剔除)的部分使用RenTex。
多谢 我每一帧都调了 但是帧数并没有提上去啊 还是20帧左右
RenTex 每帧调用还不如不调用了。你的精灵太多,就算GPU没问题,你的CPU需要遍历好多精灵,你可以设定最多精灵不超过500个(算法隐藏不重要的精灵或者结点),应该会好一点
好的 多谢了 我再研究研究
屏幕外的东西直接隐藏,立刻快很多