cocos2dx cc.SpriteBatchNode运用

前言:众多周知,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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值