cocos2dx cc.SpriteBatchNode运用

来源:互联网 发布:淘宝大众评审 编辑:程序博客网 时间:2024/05/13 19:57

前言:众多周知,batchNode可以降低drawCall提高渲染效率。原因为batchNode使用一次渲染,批次生成多个sprite。batchNode同时可以将N张切割的散图整合成一张大图,提供给GPU渲染,以下贴出本人试验出的一些配套用法。

第一种方法:-- 根节点。  local layer = cc.LayerColor:create(cc.c4b(0, 100, 100, 100))-- 加载纹理到内存。local spriteFrameCache = cc.SpriteFrameCache:getInstance()spriteFrameCache:addSpriteFrames("building.plist","building.png")-- 直接通过大图创建。local batchNode = cc.SpriteBatchNode:create("building.png")layer:addChild(batchNode)-- 从内存拿出与创batchNode相同大图里面小图的纹理加入到batchNode即可。local spr = display.newSprite("#building/build_city.png")batchNode:addChild(spr)以上:1,往纹理缓存添加大图资源。     2,创建一个以1添加的大图为资源的batchNode。     3,同个内存取出与1中plist配置路径的纹理散块,添加到batchNode。     4,将layer加入到场景中即可看到DrawCall为1。同样有第二种方法:-- 通过batchNode取出其在内存中的纹理,此时创建的图片为一整张加载的图片。local spr = cc.Sprite:createWithTexture(batchNode:getTexture())batchNode:addChild(spr)第三种方法:-- 通过batchNode取出其在内存中的纹理,只取出从0,0开始宽高为100的纹理。local spr = cc.Sprite:createWithTexture(batchNode:getTexture(), cc.rect(0, 0, 100, 100))batchNode:addChild(spr)ps:当然,往batchNode里面addchild的时候,不能添加与之本身纹理相异的纹理块。彩蛋:其实第一种方法,可以解决在设置orbitCamera的时候,渲染超出屏幕的出现的黑边。:)local function Set3dView(root)    local orbit = cc.OrbitCamera:create(0,1,0,0,-20,90, 0)    root:runAction(cc.Sequence:create{orbit})end